Категория > Новости > Беззащитная защита. Изучаем уязвимость, дающую встроить бэкдор в FortiGate - «Новости»

Беззащитная защита. Изучаем уязвимость, дающую встроить бэкдор в FortiGate - «Новости»


13-11-2023, 08:28. Автор: Никифор
CVE-2022-42475, в котором про­исхо­дит перепол­нение кучи. Уяз­вимость при­водит к выпол­нению про­изволь­ного кода. Я решил поп­робовать реали­зовать PoC, но мне помеша­ло отсутс­твие лицен­зии. Перед тем как реали­зовы­вать этот PoC, необ­ходимо уста­новить бэк­дор на FortiGate с исполь­зовани­ем уяз­вимос­ти CVE-2019-5587. В статье я рас­ска­жу, как сде­лать этот бэк­дор и как он работа­ет.

warning


Статья име­ет озна­коми­тель­ный харак­тер и пред­назна­чена для спе­циалис­тов по безопас­ности, про­водя­щих тес­тирова­ние в рам­ках кон­трак­та. Автор и редак­ция не несут ответс­твен­ности за любой вред, при­чинен­ный с при­мене­нием изло­жен­ной информа­ции. Рас­простра­нение вре­донос­ных прог­рамм, наруше­ние работы сис­тем и наруше­ние тай­ны перепис­ки прес­леду­ются по закону.


Читайте также - Остеопороз – это разрежение кости за счет вымывания из нее кальция, вызванное старческой инволюцией (старением). Фармакологи ухватились за слово «кальций», не обращая внимания на истинную причину деминерализации костей (потери микроэлементов) – инволюцию - остеопороз по доступным ценам.

FortiGate — меж­сетевой экран с воз­можностью мар­шру­тиза­ции нового поколе­ния. Он вклю­чает в себя боль­шинс­тво тра­дици­онных сер­висов, таких как про­вер­ка тра­фика, анти­вирус, VPN, сис­темы пре­дот­вра­щения втор­жений, и дру­гие фун­кции обес­печения безопас­ности. Для демонс­тра­ции уяз­вимос­ти и даль­нейших иссле­дова­ний необ­ходимо под­готовить стенд с исполь­зовани­ем FortiGate.


 

Готовим стенд


Для ресер­ча была выб­рана вер­сия FortiGate VM64 v6.4.5 build1828 (GA). Стенд раз­ворачи­ваю на VMware ESXI, а обра­зы мар­шру­тиза­тора дол­жны иметь рас­ширения .out.ovf.zip.


Пос­ле рас­паков­ки архи­ва мы получим сле­дующие фай­лы.


Беззащитная защита. Изучаем уязвимость, дающую встроить бэкдор в FortiGate - «Новости»

В даль­нейшем для ревер­са и иссле­дова­ния бинарей нам понадо­бит­ся диск вир­туаль­ной машины fortios.vmdk.


В VMware ESXI нуж­но импорти­ровать сущес­тву­ющую вир­туаль­ную машину, поэто­му сле­дует выб­рать режим Create/Register VM, а затем — Deploy a virtual machine from an OVF or OVA file.


Те­перь надо ука­зать сле­дующие фай­лы для заг­рузки вир­туаль­ной машины:




  • datadrive.vmdk — сис­темный жес­ткий диск FortiGate;


  • FortiGate-VM64.ovf — вир­туаль­ная машина;


  • fortios.vmdk — фай­ловая сис­тема и сама начин­ка FortiGate.


Имя у вир­туал­ки может быть про­изволь­ным, я наз­вал ее прос­то FortiGate.


Пе­рей­дем к нас­трой­кам сети. Все сетевые адап­теры, кро­ме пер­вого, вык­лючим, потому что будем работать толь­ко с одним. Так­же изме­ним интерфейс с [pt]Network на VM Network. Это нуж­но, что­бы вир­туаль­ная машина находи­лась с нами в одной сети.


За­пус­каем вир­туаль­ную машину, вво­дим логин — admin, пароль — Enter, пос­ле чего новый пароль необ­ходимо при­думать.


По умол­чанию FortiGate нас­тро­ен на исполь­зование в качес­тве NTP-сер­вера. Необ­ходимо отклю­чить NTP-син­хро­низа­цию для перехо­да в проб­ный режим.



info


NTP — сетевой про­токол для син­хро­низа­ции внут­ренних часов компь­юте­ра пос­редс­твом исполь­зования сетей с перемен­ной латен­тностью.



config system ntp
set ntpsync disable
set type custom
end

Здесь




  • config system ntp — коман­да для вхо­да в режим кон­фигури­рова­ния NTP;


  • set ntpsync disable — коман­да для отклю­чения син­хро­низа­ции с NTP-сер­вером;


  • set type custom — коман­да для уста­нов­ки NTP-сер­вера, который ука­зыва­ется вруч­ную.


Те­перь нас­тало вре­мя нас­тро­ить мар­шру­тиза­тор. Нас­тра­ивать будем уда­лен­ное под­клю­чение и дос­туп к веб‑интерфей­су фор­тика.


 

Удаленное подключение


Нас­тра­ивать SSH, HTTP, HTTPS, Telnet будем в CLI FortiGate. Для уда­лен­ного под­клю­чения нуж­но нас­тро­ить интерфейс, который мы оста­вили вклю­чен­ным:


config system interface
edit port1
set mode static
set role lan
set allowaccess http https telnet ssh ping
set ip 192.168.0.217/24
show
end

Здесь




  • config system interface — коман­да для вхо­да в режим кон­фигура­ции интерфей­са;


  • edit port1 — коман­да для кон­фигура­ции опре­делен­ного интерфей­са;


  • port1 — условное обоз­начение интерфей­са;


  • set mode static — коман­да для уста­нов­ки ста­тичес­кого адре­са. Что­бы нас­тро­ить DHCP, нуж­но вмес­то static написать DHCP, и тог­да IP-адре­са будут уста­нов­лены авто­мати­чес­ки;


  • set role lan— коман­да для уста­нов­ления роли и интерфей­са. В FortiGate есть четыре роли:

    • роль lan озна­чает, что интерфейс исполь­зует­ся для под­клю­чения к локаль­ной сети;

    • роль wan озна­чает, что интерфейс исполь­зует­ся для под­клю­чения к интерне­ту;

    • роль dmz озна­чает, что интерфейс исполь­зует­ся для под­клю­чения к сер­верам;

    • роль undefined озна­чает, что интерфейс не име­ет кон­крет­ной роли;




  • set allowaccess http https telnet ssh ping — коман­да для дос­тупа к управле­нию с исполь­зовани­ем httpshttptelnetsshping;


  • set ip 192.168.0.217/24 — коман­да для уста­нов­ки IP-адре­са и мас­ки под­сети;


  • show — коман­да, которая показы­вает все нас­трой­ки интерфей­са;


  • end — коман­да для завер­шения нас­трой­ки.


Вот так выг­лядит резуль­тат работы коман­ды show.


Те­перь нас­тра­иваем ста­тичес­кую мар­шру­тиза­цию для дос­тупа из дру­гих сетей к Web и CLI:


config router static
edit 1
set gateway 192.168.0.255
set device port1
set dst 0.0.0.0.0.0.0
set status enable
next
end

Здесь




  • config router static — коман­да для кон­фигура­ции ста­тичес­ких мар­шру­тов;


  • edit 1 — коман­да нас­трой­ки нумера­ции с неис­поль­зуемо­го номера;


  • set gateway 192.168.0.255 — коман­да для уста­нов­ки адре­са шлю­за;


  • set device port1 — коман­да для уста­нов­ки интерфей­са;


  • set dst 0.0.0.0 0.0.0.0 — коман­да для уста­нов­ки мес­та наз­начения;


  • set status enable — коман­да для вклю­чения ста­тичес­кой мар­шру­тиза­ции;


  • end — коман­да для завер­шения нас­трой­ки.


Ко­ман­да get router info routing-table all нуж­на для про­вер­ки нас­трой­ки ста­тичес­кой мар­шру­тиза­ции:


S* 0.0.0.0/0 [10/0]via 192.168.0.255,port1
192.168.0.0/24 is directly connected,port1

Этот вывод говорит о том, что для всех устрой­ств, находя­щих­ся в сети, шлюз по умол­чанию будет 192.168.0.255, а зна­чит, нас­трой­ка ста­тичес­кой мар­шру­тиза­ции прош­ла успешно.


Пос­ле это­го под­клю­чаем­ся к веб‑интерфей­су через бра­узер по адре­су 192.168.0.217. Логин и пароль исполь­зуй такой же, как и при под­клю­чении к коман­дной стро­ке.


 

Получаем бэкдор


Пос­ле успешной под­готов­ки стен­да нас­тало вре­мя для бэк­дора. Зай­дем в дирек­торию с обра­зом вир­туаль­ной машины и вир­туаль­ными дис­ками FortiGate. В моем слу­чае вир­туаль­ный диск называ­ется forti_6_4_5-disk1.vmdk.


Даль­ше нас­тупа­ет часть мон­тирова­ния и от­равле­ния rootfs.gz. Мон­тирова­ние выпол­няет­ся сле­дующим обра­зом:


sudo modprobe nbd max_part=16
sudo mkdir/mnt/fortios
sudo qemu-nbd -r -c/dev/nbd1 ./forti_6_4_5-disk1.vmdk
sudo mount /dev/nbd1p1 /mnt/fortios

Здесь




  • sudo modprobe nbd max_part=16 — коман­да под­готов­ки для мон­тирова­ния ста­тичес­кого VDI-обра­за;


  • sudo mkdir /mnt/fortios — коман­да для соз­дания дирек­тории /mnt/fortios;


  • sudo qemu-nbd -r -c /dev/nbd1 ./forti_6_4_5-disk1.vmdk— коман­да для экспор­та обра­за дис­ка QEMU, с исполь­зовани­ем про­токо­ла NBD:


    • -r — ключ озна­чает экспорт дис­ка толь­ко для чте­ния;


    • -c — ключ озна­чает под­клю­чение фай­ла c ука­зан­ным име­нем к пап­ке /dev устрой­ства NBD;




  • sudo mount /dev/nbd1p1 /mnt/fortios — коман­да для мон­тирова­ния дис­ка.


info


NBD (Network Block Device) — сетевой про­токол, который мож­но исполь­зовать для пересыл­ки блоч­ного устрой­ства (обыч­но жес­тко­го дис­ка или раз­дела) с одно­го компь­юте­ра на дру­гой. Нап­ример, локаль­ный компь­ютер может получить дос­туп к жес­тко­му дис­ку, под­клю­чен­ному к дру­гому компь­юте­ру. В нашем слу­чае про­токол исполь­зует­ся для под­клю­чения вир­туаль­ного жес­тко­го дис­ка к компь­юте­ру. QEMU уме­ет экспор­тировать вир­туаль­ный образ дис­ка, исполь­зуя про­токол NBD.



В резуль­тате forti_6_4_5-disk1.vmdk успешно мон­тиру­ется к нашему компь­юте­ру.




Перейти обратно к новости