Пентест. Думаємо як зловмисник Частина 1. Загрози ззовні

8 травня 2023 1 хвилина Автор: Cyber Witcher

Що таке пентест і для чого він потрібен?

Про тестування на проникнення написано вже чимало книг і статей. Ця тема стає дедалі актуальнішою з кожним новим інцидентом ІБ. Зловмисники проникають у мережі різних організацій з метою прямого розкрадання грошей з рахунків (банки, фінансові організації), атак на відмову в обслуговуванні (підприємства критичної інфраструктури), розкрадання персональних даних та інших шкідливих дій. Системи інформаційної безпеки більшості організацій не здатні повною мірою захистити від дій кваліфікованих зловмисників. Причин цьому кілька. Однією з них є недостатня ефективність систем захисту та недостатньо жорстке налаштування засобів, що входять до неї. Спроба закрити частину вимог нормативки організаційними заходами замість технічних часто призводить до зниження загальної ефективності системи захисту. Ну і нарешті, моделі загроз не можуть дати точних рекомендацій щодо того, як будуть ламати вашу мережу. Тестування на проникнення дає змогу подивитися на злам вашої мережі очима хакера. Адже перебуваючи на стороні захисту, ви можете просто не знати або не помічати деякі моменти, які дадуть змогу хакеру з легкістю проникнути у вашу мережу.

Наприклад, багато безпечників “старої” школи дуже часто недооцінюють загрози, які походять від соціальної інженерії та комбінованих атак. Звісно, тестування на проникнення теж навряд чи покаже 100% всіляких векторів атак, адже завжди можуть знайтися вразливості нульового дня (Zero Day), про які ще ніхто, крім самих зловмисників, не знає. Але оцінити загальний рівень захищеності, зрозуміти, яких засобів захисту не вистачає на практиці і які налаштування ще треба підкрутити за результатами пентесту цілком можна. І в результаті вимоги до системи захисту доповнюються результатами пентесту і можливо якимись додатковими вимогами, наприклад відмовостійкості.

Переходимо до практики

Сподіваюся, у своєму розгорнутому вступі мені вдалося обґрунтувати необхідність проведення тестування на проникнення для створення по-справжньому ефективної системи захисту.

Тож тепер ми можемо сміливо приступати до практичної частини. Тестування на проникнення ми розділимо на кілька частин. Пентест складатиметься з технічної частини та соціальної інженерії. Технічну частину ми зі свого боку поділимо на зовнішній і внутрішній пентест.

Такий поділ технічної частини можна пояснити тими видами порушників, від яких може виходити загроза. Під внутрішнім порушником ми розумітимемо зловмисників, які перебувають безпосередньо на контрольованій території або мають до неї легальний доступ. Всіх інших ми будемо вважати зовнішніми. Тобто, зовнішнім у нас буде і хакер, що ламає мережу через інтернет, і зломщик, який перебуває в мережі групи компаній, але не має будь-якого легального доступу до корпоративної мережі цієї організації.

Проводимо розвідку

Отже, приступимо. Насамперед поговоримо про те, яку інформацію можна зібрати про атаковану організацію та її ресурси в інтернеті. Будемо вважати, що нам відомі назва організації, офіційний сайт і контактна інформація деяких співробітників. Почнемо із сайту. За допомогою сервісу https://whois.ru/ або аналогічних можна отримати повну інформацію про те, на кого зареєстровано цей ресурс, які DNS сервери використовують (попутно можна зрозуміти, в якого хмарного провайдера розміщено ресурс).

Ми дізналися дещо про офіційні ресурси організації, але ми поки що не знаємо, де розміщується веб сайт: на майданчику провайдера або в ЦОДі організації, адже багато компаній розміщують свої веб ресурси безпосередньо на майданчиках хостинг-провайдерів, щоб не здійснювати самим супровід веб ресурсів. Отже, у нас є IP адреса вебсайту, давайте спробуємо дізнатися, кому належить пул, до якого входить ця адреса. Скористаємося сервісом https://2ip.ru/whois, вказавши ім’я сайту або отриманий раніше IP. У полі IP діапазон ми можемо спостерігати всю підмережу, в яку входить наша адреса, ну а в полі Назва провайдера ми бачимо, на кого зареєстровано цей пул адрес. У прикладі на скріншоті корпоративний сайт розташовується на майданчику хмарного провайдера.

Що робити далі із цією інформацією? Якщо сайт розташовується на майданчику хостинг провайдера, то з великою ймовірністю ми не зможемо розвинути атаку далі, тому що дуже часто корпоративні веб-ресурси виконують суто маркетингові функції, відображаючи інформацію про компанію. У такому разі, веб портал, як правило, не взаємодіє з корпоративною мережею самої організації. Бувають, звичайно, винятки, коли будь-яка інформація експортується з БД, що знаходиться в корпоративній мережі, а потім відображається на сайті. Так що, пошукати вразливості на сайті все одно необхідно, але розраховувати на те, що вдасться потрапити з сайту в корпоративну мережу не варто.

Якщо, як на нашому скріншоті, сайт знаходиться у хмарного провайдера і при цьому орендується великий пул адрес (ну хоча б кілька десятків), є шанс, що в цій підмережі знаходиться не тільки вебсервер, а й інші корпоративні ресурси. Ну а якщо IP адреса вебсервера входить до пулу адрес, орендованого безпосередньо тестованою компанією, то тоді шанси на проникнення в мережу через сайт досить високі.

IP з пошти

Продовжуючи розмову про зовнішні підмережі, орендовані замовниками, є ще кілька способів дізнатися IP-адреси, що належать компанії. Для початку за допомогою утиліти nslookup дізнаємося MX записи для даного домену. Як я вже згадував на початку статті, нам відомі кілька поштових адрес, наприклад [email protected]. Нам необхідно щось написати на цю адресу й обов’язково отримати відповідь. Далі в будь-якому поштовому клієнті дивимося лист у форматі RFC-822.

Тут можна побачити багато цікавого. Насамперед ми можемо дізнатися IP адресу сервера відправника в полі Sender. Також тут можуть залишати свої відбитки антивірус і антиспам. У цьому прикладі відзначився антиспам Яндекса. Ця інформація нам може допомогти згодом для проникнення в мережу. IP адреса сервера відправника за ідеєю має збігатися з MX записом, який ми знайшли за допомогою nslookup, але можливі варіанти, тож краще перевірити.

Біле на білому

Крім того, є ще один спосіб дізнатися IP адреси компанії. Зараз важко знайти корпоративну поштову систему, де відключено HTML під час перегляду листа. А як інакше, усім же дуже подобається корпоративний логотип у підписі листа, тло і розмітка в тексті. Скористаємося цим. За допомогою HTML можна помістити в лист тег, що відкриває графічний файл розміром в 1 піксель, який має колір фону листа. Наприклад, білий піксель. Під час відкриття листа відбудеться звернення до вебсервера з цим файлом і в логах буде зафіксовано зовнішню IP-адресу, з якої було здійснено звернення.

Існують платні сервіси, що реалізують подібний функціонал. Але в принципі логування звернень можна реалізувати самостійно, для цього потрібен тільки вебсервер із зовнішнім IP. Реєструвати DNS ім’я не обов’язково, можна звертатися до файлу за адресою.

У листі поміщаємо щось подібне:

А на сервері дивимося файл журналів доступу, у мене це /var/log/apache2/access.log. У ньому відображається адреса і час звернення до файлу. Таким чином, ми можемо дізнатися IP адресу шлюзу, який використовується в організації для виходу в інтернет.

Перш ніж рухатися далі, підведемо невеликий підсумок. Наразі нам вдалося зібрати інформацію про різні зовнішні ресурси, які використовує організація. Це не тільки корпоративний веб-сайт, а й орендовані пули адрес і шлюзи доступу. На підставі цієї інформації ми вже можемо отримати загальне уявлення про мережеву взаємодію між сервісами організації.

Почнемо з сайту

Не секрет, що багато веб сторінок містять уразливості, проте далеко не всі з них можна використовувати для подальшого розвитку атаки. Наприклад, підміна вмісту сторінок сайту звісно може завдати певної шкоди іміджу організації, але не більше. Тому ми не будемо розглядати всі вразливості з OWASP TOP 10, а поговоримо лише про основні моменти зі збору інформації. Насамперед спробуємо пошукати вразливості на самому сайті. Для цього скористаємося безкоштовним сканером Nikto, який входить до складу Kali Linux. Не забуваємо про необхідність використовувати VPN для приховування своїх дій на цьому ресурсі. У мене в якості піддослідної жертви виступає сайт http://testphp.vulnweb.com/, розроблений компанією Acunetix для тестування сканерів вразливостей. В отриманому звіті нас можуть зацікавити розкриття різних файлів і інформація про версії ПЗ, що використовуються.

У блозі OTUS є докладна стаття, присвячена роботі зNikto https://habr.com/ru/company/otus/blog/492546/.

Крім пошуку вразливостей можна спробувати перебрати каталоги на веб сервері. Дуже часто адміни вебсерверів залишають доступними на читання будь-які каталоги (адмінські панелі, старі версії сайту, бекапи тощо), на які не ведуть посилання з основного сайту.

Однак, ці каталоги можна знайти за допомогою спеціальних утиліт. Я використовую dirb зі складу Kali Linux. В результате перебора мы обнаружили каталог Admin. С помощью такого перебора можно получить общее представление о том, на каком движке крутится веб сайт. Например, наличие большого числа каталогов wp* говорит об использовании WordPress.

Кстати, иногда удается найти папку типа Upload, в которой тоже может быть множество интересной информации. Ну и не стоит пренебрегать обычными поисковиками. Например в Яндексе есть опция Сохраненная копия. Эта опция бывает полезна когда какая-либо страница уже недоступна, а очень хочется узнать что же там было. И конечно помним про старый добрый архив Интернета https://archive.org/.

Ще одна класична вразливість з OWASP TOP-10 це SQL ін’єкція. Суть цієї атаки полягає в можливості виконати власний запит до бази даних і отримати доступ до закритої інформації. Для пошуку таких вразливостей скористаємося утилітою sqlmap. На наведеному скріншоті sqlmap вдалося виявити дві бази MySQL: acuart та information_schema. Для прикладу подивимося, які таблиці входять до складу acuart.

Для цього запустимо таку команду:

Але зовнішній пентест не обмежується тільки вебсайтом. Нагадаю, що веб сайт може розташовуватися на сторонньому майданчику, не мати прямих зв’язків із корпоративними ресурсами і компрометація всього вебсервера разом із захопленням root не призведе до подальшого розвитку атаки на внутрішню мережу. Хоча пентестерам буде що написати у звіті про зовнішнє тестування.

У нас ще є знайдені раніше підмережі, орендовані цією організацією. Насамперед їх можна просканувати на наявність відкритих портів і виявлення використовуваного ПЗ. Для цього можна скористатися утилітами nmap і masscan. У своєму прикладі я скористаюся masscan. На вхід необхідно вказати скановану підмережу і діапазон портів.

Я сканував підмережу веб хостингу, тому у всіх відкриті порти 80. Насправді за всієї позірної неефективності сканування портів для зовнішніх підмереж, на ділі можна отримати доволі цікаві результати, наприклад, RDP і SSH, які дивляться назовні. І якщо у випадку з SSH часто використовують автентифікацію за сертифікатами і підбирати пароль на ці вузли в загальному випадку марно, то у випадку з RDP можна домогтися значно більшого. Наприклад, можна спробувати підібрати пароль, пошукати вразливості тощо.

І на завершення теми зовнішнього пентесту нагадаю ще про один всесвітньо відомий інструмент – це ресурс shodan.io. Цей сайт є по суті онлайн сканером портів. Зазначивши IP-адресу, можна отримати інформацію про відкриті порти на ресурсі та сервіси, що працюють.

Інші статті по темі
Знайшли помилку?
Якщо ви знайшли помилку, зробіть скріншот і надішліть його боту.