«Атака на паливний склад» або ламаємо SCADA систему на PHDays VI

Організатори PHDays традиційно показали свою майстерність організації, як завжди щось нове, цікаве і звичайно велика кількість стендів під управлінням SCADA систем. Рідкісна можливість спробувати свої сили у зломі системи життєзабезпечення великого міста, розгорнути протиракетну установку і зробити постріл, влаштувати залізничну катастрофу, затопити місто, захопити управління дамбою і багато іншого.
Всіх учасників, і ми не виняток, приваблює можливість отримання досвіду роботи зі SCADA, керуючої моделями промислових об'єктів. Нам видався цікавим стенд компанії Інфотекс — «Атака на паливний склад», який нам в підсумку вдалося підкорити. Нижче наведена послідовність злому, кому це цікаво.

Умови конкурсу «Атака на паливний склад»
Вихідні дані: атака складається з двох етапів.
1. Етап: Необхідно в «Цифровому барі» знайти підказку для початку першого етапу атаки. В результаті 1 етапу атаки потрібно оволодіти якимось «секретом» для переходу до етапу №2. Перший етап вважається успішно пройденою у випадку, якщо дії порушника не були помічені міжмережевим екраном.
2. Етап: Отримавши «секрет», атакуючий переходить до другої стадії атаки. Завдання – подача не авторизованої команди на розлив пуншу.
Мета: Здійснити несанкціонований злив палива об'ємом 50 або 100 літрів.
Дозволяється: Використання власного ноутбука, з будь-яким необхідним програмним забезпеченням.
Забороняється: Будь-який фізичний вплив на макет паливного складу. Порушник буде відразу відсторонюється від участі в конкурсі.

Отже, етап 1.
Відомо:
WiFi
SSID: step_default
PASS: 00000000
FTP
login: user
pass:Zb1HjJ9I



Підключившись до мережі по DHCP отримуємо IP 50.50.50.12. і скануємо доступну мережу.
sudo netdiscover -i wlan0 результат дає нам кілька IP, кожен з яких скануємо на відкриті порти через nmap.
nmap -Pn — з усього списку найцікавішим виявився IP:50.50.50.3, з відкритими портами 22(SSH), 21(FTP), 80(HTTP) і 7777 (не відомий сервіс). Відразу згадалося, що у нас є логін і пароль до FTP серверу. Після авторизації на FTP виявляється файл 7777.zip. Завантажуємо і пробуємо розпакувати, але не тут-то було, архів запаролен. Вводимо все, що нам відомо з умов завдання і знайденого по дорозі. Нічого не допомогло. Прийняли рішення відкласти питання і йти далі. Через браузер відкриваємо 50.50.50.3 і бачимо наступне:



Здавалося б, звичайна картинка, але, досвід проходження HackQuest'ів не пройшов безслідно. Завантажуємо зображення і вивчаємо вміст.



Використовуючи cat виявляємо деяке значення в кінці файлу «TnpjM056bzNPVFU0TWpRMk5nbz0K». Поміркувавши прийшли до висновку, що це Base64 і виконали наступну команду:

echo TnpjM056bzNPVFU0TWpRMk5nbz0K | base64 -d
отримали відповідь – Nzc3Nzo3OTU4MjQ2Ngo=

проробляємо цей трюк ще раз, на цей раз з отриманим результатом
echo Nzc3Nzo3OTU4MjQ2Ngo= | base64 -d
у відповідь – 7777:79582466

Отже, тепер у нас є нові значення, залишається питання: «Куди їх дівати!?». Спроби авторизуватися за цими даними через FTP і SSH, а також використання в якості пароля *.zip архіву результату не дали. Згадали, що на віддаленій машині так само відкритий порт 7777. Єднаємося через telnet і отримуємо повідомлення «Tell me your ID». Так як перша частина відповіді є вказівкою на порт (7777), припустили, що друга запитуваний ID.



Все зроблено правильно! Результатом роботи став ще один ПРАПОР (Ffl42Nm5b4#445). Не відходячи від каси згадуємо, що у нас так само є файл з ім'ям 7777.zip. Вводимо пароль отримані дані і вуаля, розпакований архів. Всередині архіву файл johny, подивившись на утримання якого наш сисадмін, без тіні сумнівів озвучив вирок «Це SSH ключ» і зробив наступне:



Використовуючи SSH ключ і ім'я файлу в якості імені облікового запису (johny) ми підключилися до сервера 50.50.50.3 і отримали у відповідь нові дані
IG10: YourPassPhrese987

IG10 виявилася ще однією Wi-Fi точкою доступу. Підключившись до IG10, ми почали все спочатку.

sudo netdiscover -i wlan0
на цей раз увагу привернуло те, що в мережі було два адресних простору – 192.168.2.1/24 і 192.168.20.1/24
Примітно, що gateway (192.168.1.1 & 192.168.20.1) мали один і той же MAC, а це значить — в мережі всього один роутер. Для доступу до обох подсетям прописали маршрут.

sudo route add -net 192.168.0.0 netmask 255.255.0.0 gw 192.168.20.1

Далі взялися за спуфінга. Для подачі палива на роботі, підключеного до WiFi мережі IG10, подавалася команда, яка, в свою чергу, оброблялася на сервері і видавала команду на скидання палива. На жаль, файл *.pcap, з даними, зібраними через спуфінга, ми не зберегли, тому доведеться пояснювати на пальцях.
Ми виявили, що при натисканні кнопки скидання палива з IP 192.168.20.7 (імовірно робот), за протоколом modbus, у бік IP 192.168.2.2 (імовірно керуючий сервер) передається пакет на порт 502. Таким чином, ми визначили роль пристроїв. Залишилося тільки відтворити повторну відправку пакета, вся необхідна для цього інформація у нас вже була. Однак, повторно відтворити відправку пакета своїми силами у нас не вийшло з-за складності відправки сформованого пакета. На допомогу прийшов github, завантаживши необхідну либу і трохи модифікувавши її під свої цілі, вийшло відтворити дані відправляються роботом – команду на скидання палива.


Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.