Close
KR. LABORATORIES
Digital-лабораторія IT технологій
 UK EN

Як провести зовнішній аудит безпеки веб-додатків? Алгоритм і методика роботи.

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

Зміст статті

Підготовка робочого середовища

Насамперед необхідно налаштувати середовище для роботи, наприклад:

  • Встановити ОС Linux. Рекомендую використовувати поєднання Linux Mint як хост-система + Kali Linux на віртуалці (VirtualBox) або VPS (через VNC). Можна також використати додаткові віртуальні машини з іншими дистрибутивами, наприклад Parrot Linux та BlackArch.
  • Підготувати інструментарій: утиліти, сервіси, кіберпошукові системи і т.д.
  • Встановити і налаштувати надійний VPN для шифрування трафіку і анонімізації IP-адреси.
  • Налаштувати браузер Mozilla Firefox й встановити до нього необхідні розширення (див. матеріали 1, 2).

Автоматичне IAST/DAST сканування

IAST (Interactive Application Security Testing) та DAST (Dynamic Application Security Testing) – це два методи, які використовуються для автоматичного виявлення вразливостей.

Ось список інструментів для проведення IAST/DAST сканування:

Розгортаємо ці інструменти на віртуалці Kali Linux, запускаємо їх і поки відбуватиметься сканування (а воно буде виконуватись тривалий час), переходимо до наступного кроку.

Напівавтоматичне / ручне сканування

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

Аналіз мережевого периметру (Network Perimeter Overview)

Використовуємо інструменти сканування мережевих TCP/UDP портів, наприклад Masscan та Nmap, а також кіберпошукові системи, такі як Shodan, Censys, DNSlytics, DNSdumpster та інші для збору додаткової інформації.

Всі операції проводити бажано на віртуальній машині або VPS, щоб не розкривати інформацію про домашню локальну систему.

Приклади деяких команд:

  • ping XX.XX.XXX.XXX — перевірка чи відповідає, пінгується досліджуваний ресурс.
  • traceroute --resolve-hostnames XX.XX.XXX.XXX — визначення маршруту та проміжних вузлів через які проходить з’єднання з досліджуваним ресурсом.
  • traceroute -I XX.XX.XXX.XXX — те саме, тільки використовується ICMP протокол замість UDP.
  • whois XX.XX.XXX.XXX — отримання інформації про досліджуваний ресурс з реєстру WHOIS, дані про підмережу, реєстратора, власника.
  • curl --request GET \ --url https://api.securitytrails.com/v1/history/securitytrails.com/whois \ --header 'APIKEY: ***' — отримання історії WHOIS з допомогою API SecurityTrails.
  • curl https://freeapi.dnslytics.net/v1/ip2asn/XX.XX.XXX.XXX — отримання номеру ASN провайдера з допомогою кіберпошукового сервісу DNSlytics.
  • curl --request GET --url https://api.securitytrails.com/v1/ips/nearby/XX.XX.XXX.XXX --header 'APIKEY: ***' — пошук пов’язаних ресурсів з допомогою API SecurityTrails.
  • shodan host XX.XX.XXX.XX — отримання інформації про досліджуваний ресурс з кіберпошукового сервісу Shodan.
  • censys view XX.XX.XXX.XX — отримання інформації про досліджуваний ресурс з кіберпошукового сервісу Censys.
  • sudo masscan -p1-65535 XX.XX.XXX.XXX— сканування мережевих портів методом SYN Stealth з допомогою інструменту massscan.
  • sudo nmap -sV -O -A -Pn XX.XX.XXX.XXX — отримання відомостей про мережеві TCP-порти і компоненти з допомогою NMAP.
  • sudo nmap -sU -p 1-124 XX.XXX.XXX.XXX — отримання відомостей про мерережеві UDP-пороти і компоненти.
  • nmap -sV --script vulners XX.XX.XXX.XXX — сканування по скрипту NMAP з виявленням вразливостей.
  • nmap -sV -p 3306 --script mysql-audit,mysql-databases,mysql-dump-hashes,mysql-empty-password,mysql-enum,mysql-info,mysql-query,mysql-users,mysql-variables,mysql-vuln-cve2012-2122 XX.XX.XXX.XXX — деталізований аналіз і пошук вразливостей MySQL з допомогою NMAP.
  • nmap -sV -p 22 --script ssh-auth-methods,ssh-hostkey,ssh-publickey-acceptance,ssh-run,ssh2-enum-algos,sshv1 XXX.XXX.XXX.XXX — деталізований аналіз і пошук вразливостей SSH з допомогою NMAP.

З отриманих результатів формуємо приблизно таку таблицю з впорядкованим набором інформації:

TargetIP AddressOSPortProtocolServicesApp / Verisons
[hostname]XXX.XX.XX.XXUbuntu 20.0421TCPFTP ServerPureFTPd 1.0.48
22TCPSSH ServerOpenSSH 8.2 p1
53UDPDNS ServerBind 9.16
80TCPHTTP ServerNginx 2.16
111TCPRPC ServerRpcbind 2
443TCPHTTPS ServerNginx 2.16

Таким чином, ми отримали МЕРЕЖЕВУ КАРТУ (Network Mapping) досліджуваного ресурсу. Це дає нам інформацію про мережевий периметр і серверну інфраструктуру. Ми дізналися які протоколи і з’єднання підтримуються, скільки і які порти відкриті, які компоненти використовуються на кожному із цих портів, версії програмного забезпечення та багато іншого. Маючи такі відомості, можна ідентифікувати вразливості, підібрати експлойти та проексплуатувати їх.

Аналіз DNS-зони (DNS Discovery)

Цей етап є своєрідним продовженням попереднього і включає пасивну та активну розвідку даних DNS-зони (Domain Name System), яка містить прив’язування/направлення на різноманітні мережеві ресурси.

Приклади команд:

  • host XX.XX.XXX.XXX — отримання звортного rDNS (PTR) запису.
  • dig -x XX.XX.XXX.XXX — ще один спосіб отримати rDNS запис.
  • dig +noall +answer +multiline [hostname] a && dig +noall +answer +multiline [hostname] aaaa && dig +noall +answer +multiline [hostname] mx && dig +noall +answer +multiline [hostname] txt && dig +noall +answer +multiline [hostname] ns && dig +noall +answer +multiline [hostname] soa— комбінована команда для отримання всіх записів DNS-зони з допомогою інструменту dig.
  • dig axfr @ns.example.com [hostname] — перевірка повної передачі записів DNS, вразливість Zone Transfer.
  • python3 dnsrecon.py -d [hostname] — аналіз DNS з допомогою інструменту dnsreacon.
  • curl --request GET \
    --url https://api.securitytrails.com/v1/history/[hostname]]/dns/a \
    --header 'APIKEY: ***' \
    --header 'accept: application/json' — аналіз історії DNS з допомогою API SecurityTrails.
  • fierce --domain [hostname] --subdomains webmail ftp cpanel whm mail cp --connect — аналіз підмережі за вказаними ресурсом та його субдоменами з допомогою утиліти fierce.
  • fierce --domain [hostname] — тест на передачу DNS-зони.
  • cat domains.txt | ./DNSaxfr.sh -r 0 — масова перевірка на передачу DNS-зони з допомогою скрипту DNSaxfr.sh.
  • dnswalk -r -a -d [hostname]. — перевірка DNS.
  • dnsmap [hostname] — маппінг DNS.

З отриманих результатів формуємо приблизно таку таблицю з впорядкованим набором інформації:

[hostname]
DNS RecordTTLValueIPv4IPv6ASNCountry
TXT3600“v=spf1 include:_spf.mail.hostinger.com ~all”XX.XX.XXX.XXXX.XX.XXX.XXProviderUSA, San Francisco
MX1440010 mx2.example.comXX.XX.XXX.XXXX.XX.XXX.XXProviderUSA, San Francisco
NS86400ns2.example.com.XX.XX.XXX.XXXX.XX.XXX.XXProviderUSA, San Francisco
ns1.example.com.XX.XX.XXX.XXXX.XX.XXX.XXProviderUSA, San Francisco
A1218 XX.XX.XXX.XXXX.XX.XXX.XXProviderUSA, San Francisco
AAAA1137 XX.XX.XXX.XXXX.XX.XXX.XXProviderUSA, San Francisco
SOAns1.dns-parking.com. dns.hostinger.com. (
2023101901 ; serial
10000 ; refresh (2 hours 46 minutes 40 seconds)
2400 ; retry (40 minutes)
604800 ; expire (1 week)
600 ; minimum (10 minutes)
)
 XX.XX.XXX.XXXX.XX.XXX.XXProviderUSA, San Francisco
rDNS (PTR)XXX.XXX.XXX.XX.in-addr.arpa domain name pointer web.example.net.     

У висновку маємо вичерпну інформацію по DNS, що може бути використано для виявлення вразливостей, планування та здійснення атак.

Пошук субдоменів (Subdomain Discovery)

Даний етап також є логічним продовженням попереднього. Його завданням є виявлення всіх субдоменів, пов’язаних з цільовим ресурсом, які можуть містити додаткові веб-додатки, служби або інші ресурси, що можуть бути вразливими до атак. Дуже часто через субдомени можна визначити справжню IP-адресу цільового ресурсу, якщо він прикритий Cloudflare.

Для пошуку субдоменів можуть знадобитися такі інструменти:

Приклади команд:

  • censys subdomains [hostname] — пошук субдоменів з допомогою CLI Censys.
  • python3 censys-subdomain-finder.py [hostname] — виявлення субдоменів з допомогою скрипту на базі API Censys.
  • bbot -t [hostname] -f subdomain-enum — пошук субдоменів з допомогою утиліти BBOT.
  • subfinder -d [hostname] — пошук субдоменів з допомогою утиліти Subfinder.
  • python3 sublist3r.py -d [hostname] — пошук субдоменів з допомогою утиліти Subl1s3r.
  • knockpy -d [hostname] --recon --bruteforce — брутфорс субдоменів з допомогою утиліти knock.
  • python3 cloakquest3r.py [hostname] — брутфорс субдоменів з допомогою утиліти CloackQuest.
  • gobuster dns -d [hostname] -w ~/wordlists/subdomains.txt — енумерація субдоменів по словнику з допомогою утиліти gobuster.
  • dnsenum [hostname] — комплексна перевірка DNS з енумерацією субдоменів.
  • ffuf -w ~/SecLists/Discovery/DNS/subdomains-top1million-5000.txt -H "Host: FUZZ.example.com" -u [hostname] — брутфорс субдоменів по словнику з допомогою утиліти FFUF.

З отриманих результатів формуємо приблизно таку таблицю з впорядкованим набором інформації:

Subdomain listStatus
sub1.example.comActive
sub2.example.comDead

Усі активні субдомени можна відправити на автоматичне сканування і досліджувати окремо.

Аналіз TLS/SSL

Наступним кроком буде аналіз TLS-шифрування і SSL-сертифікату. TLS (Transport Layer Security) – це криптографічний протокол для забезпечення передачі даних на рівні сервера. SSL (Socket Layer Security) – це протокол, який забезпечує безпечне HTTPS-з’єднання та регулює його на рівні веб-браузера. Обидва протоколи повинні бути актуальними і валідними, щоби унеможливити перехоплення або модифікацію даних.

Сервіси для перевірки і тестування TLS/SSL:

Приклади команд:

  • ./testssl.sh XX.XX.XXX.XXX — тестування SSL/TLS з допомогою утиліти testssl.sh.
  • curl -vvI [hostname] — аналіз ланцюжка SSL сертифікатів.
  • curl -v --cert-status [hostname] — вивід інформації про сертифікат у зручному форматі.
  • curl -tlsv1.2 [hostname] — тест на підтримку TLS 1.2.
  • openssl s_client -connect [hostname]:443 -showcerts — перевірка TLS/SSL з допомогою openssl.

Аналіз HTTP-заголовків

HTTP-заголовки – це службова, технічна і описова інформація, яка передається на рівні “клієнт-сервер” при доступі до сайту. HTTP-заголовки діють як своєрідні інструкції, які вказують серверу як саме потрібно відрендерити веб-сторінку. Деякі заголовки виконують роль безпеки (HTTP Security Headers) і захищають ресурс від атак, тому їх відсутність різко підвищує кількість ризиків та вразливостей.

Сервіси:

Приклади команд:

  • ./nikto.pl -h [hostname] — аудит з допомогою утиліти Nikto.
  • whatweb -v -a3 [hostname] — аудит з допомогою утиліти WhatWeb.
  • curl -I [hostname] — аналіз HTTP-заголовків з допомогою утиліти curl.

Аналіз файлової структури

Цей етап включає парсинг ієрархічної структури сайту, виявлення прихованих папок і файлів, адміністративних вузлів, парсинг/cкрапінг URL.

Інструменти:

  • Burp Suite
  • OWASP Zap
  • Acunetix Vulnerability Scanner
  • Spider Screaming Frog
  • XENU
  • Bug Bounty Helper

Приклади команд:

  • dirb [hostname] — сканування директорій з допомогою утиліти dirb.
  • dirhunt [hostname] — сканування директорій з допомогою утиліти dirhunt.
  • gobuster dir -u [hostname] -w /usr/share/dirbuster/wordlists/vulners.txt -e -s 200, 301, 302 — сканування директорій утилітою gobuster з показом результатів, що відповідають зазначеним статусам сервера.
  • python3 dirsearch.py -e php  -u [hostname] --exclude-status 403,401 — сканування на наявність файлів php утилітою dirsearch з показом усіх результатів, окрім відповідей 403 і 401.
  • ffuf -u [hostname]/FUZZ -w ~/seclists/Discovery/Web-Content/raft-medium-words-lowercase.txt -e .php,.html,.txt -mc 200 — пошук файлів утилітою ffuf по словнику з вказаними розширеннями та кодом відповіді сервера 200.
  • python3 photon.py -u "[hostname]" — парсинг структури заданного ресурсу.
  • python3 pidrila.py -u [hostname] -l ~/dir — сканування структури сайту утилітою pidrila, шукає файли, каталоги які можуть містити важливу інформацію.
  • webpalm -u [hostname] -l1 -x 404,401,403 — парсинг структури сайту з допомогою утиліти webpalm.
  • wget -qO- [hostname] | tr \" \\n | grep https\*:// — вивід усіх URL-адрес зі сторінки на екран в консоль.

Аналіз frontend-технологій

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

Інструменти, додатки і сервіси:

Приклади команд:

  • wpscan --url [hostname] --enumerate u,ap,vt,tt,cb,dbe,m --api-token *** --random-user-agent — сканування сайту на WordPress з допомогою утиліти WPScan.
  • npx hint [hostname] — сканування вихідного коду сайту і пошук вразливих технологій з допомогою сканера WebHint.io.

Аналіз вихідного коду і веб-елементів

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

Інструменти:

Приклади команд:

  • npx hint [hostname] — сканування вихідного коду сайту і пошук вразливих технологій з допомогою сканера WebHint.io.
  • snyk code test vuln.js — сканування вихідного коду вказаного файлу з допомогою Snyk CLI.

Важливо також перевіряти код не тільки з допомогою автоматичних інструментів, але й вручну. Автоматичні інструменти допомагають виявити очевидні помилки та недоліки, такі як синтаксичні помилки, неоптимальний код чи потенційні проблеми безпеки. Однак вони не завжди здатні виявити більш складні проблеми, такі як неправильне використання алгоритмів чи неочевидні баги.

Під час ручної перевірки можна виявити логічні помилки, неправильне використання API, відсутність CSRF-токенів, вразливості до XSS/SQL-ін’єкцій та інші аспекти, які можуть впливати на якість і надійність веб-додатка. Ось список веб-елементів, на які я, зазвичай, звертаю увагу:

  • Текстові поля
  • Кнопки
  • Форми:
    • Контактнні форми
    • Форми збору даних
    • Форми входу
    • Форми підписки

Ідентифікація та оцінка вразливостей

Провівши сканування і виявивши вразливості, необхідно провести їх ідентифікацію та оцінку. Тут допоможуть CVE (Common Vulnerabilities and Exposures, укр. “Загальновідомі вразливості та витоки”) та CWE (Common Weakness Enumeration) – це бази даних, які систематизують інформацію про різні вразливості та класифікують їх. Кожній вразливості в системах CVE/CWE призначається ідентифікатор. По суті, це стандартизовані словники загальновідомих вразливостей і ризиків. Вони наповнюються і підтримуються світовою спільнотою з кібербезпеи.

Ось список популярних баз даних вразливостей:

Окрім того, існують бази даних експлойтів, які можуть знадобитися для того, щоб оцінити критичність, зрозуміти як ті чи інші вразливості можуть бути проексплуатовані:

Важливим інструментом є Common Vulnerability Scoring System (CVSS) – це відкрита стандартизована система оцінки вразливостей, яка використовує список CVE та інші джерела для отримання числової оцінки критичності вразливості. Розроблена об’єднанням груп реагування на інциденти та безпеку FIRST (Forum of Incident Response and Security Teams) у співпраці з NIST. Розробники: Peter Mell, Karen Scarfone, Sasha Romanosky. CVSS допомагає спеціалістам з кібербезпеки пріоритезувати ризики і підготувати рішення щодо їх усунення Калькулятор CVSS існує в різних версіях: CVSS 1.0 (2005), CVSS 2.0 (2007), CVSS 3.0 (2015), CVSS 4.0 (2023).

CVSS оцінює вразливість по 10-бальній шкалі:

Ступінь критичностіБал CVSSОпис
Critical9.0 – 10Критичний рівень вразливості, який однозначно призводить до несанкціонованого доступу, зламу або втрати даних. Потребує негайного реагування.
High7.0 – 8.9Високий рівень вразливості, що може призвести до несанкціонованого доступу, зламу, втрати або компрометації даних. Потребує негайного реагування.
Medium4.0 – 6.9Cередній рівень вразливості, що за певних обставин та дій може призвести до несанкціонованого доступу, зламу, втрати або компрометації даних. Потребує реагування в найкоротші терміни.
Low1.0 – 3.9Низький рівень вразливості, що у поєднанні з іншими вразливостями може являти потенційний ризик, що призводить до несанкціонованого доступу, зламу або втрати даних. Потребує своєчасного, планового реагування.
Info0.1 – 0.9Інформаційний рівень вразливості, що являє собою додаткові відомості, які можуть сприяти подальшій розвідці та плануванню зловмисних атак на ресурс. Потребує ретельного аналізу.

CVSS 3.1 складається з таких метрик:

  • Attack Vector (AV) — вектор атаки, визначає, який рівень доступу потрібен зловмиснику для здійснення атаки. Тут можна обрати 4 рівня: Network (N), Adjacent (A), Local (L), Physical (P). Для веб-додатків, доступ до яких здійснюється через Інтернет, ця оцінка завжди буде Network (Мережа).
  • Attack Complexity (AC) — складність атаки: Low (L) або High (H). Високий рівень складності передбачає, що зловмисник повинен мати привілейовані або внутрішні знання про ціль, щоб здійснити атаку. Низький рівень – атаку можна здійснити без спеціальних знань про ціль.
  • Privileges Required (PR) — рівень привілегій, містить три значення: None (N), Low (L), High (H). Якщо атаку можна здійснити без автентифікації, встановлюємо значення None (N). Якщо зловмисник отримав доступ до системи з привілеями звичайного користувача – ставимо Low (L). Якщо цей обліковий запис з привілеями адміністратора – ставимо High (H).
  • User Interaction (UI) — взаємодія з користувачем, містить два значення: None (N) та Required (R).  Наприклад, якщо для здійснення атаки зловмисник повинен взаємодіяти з іншою особою, яка має доступ, тоді обираємо Required (R).
  • Scope (S) — вплив на інші компоненти системи, Unchanged (U) або Changed (C). Якщо зловмисники в результаті експлуатації вразливості можуть отримати додатковий доступ – ставимо Changed (C).
  • Confidentiality (C) — вплив на конфіденційність, None (N), Low (L), High (H). Якщо атака може призвести до зчитування особистих даних, то має місце вплив на конфіденційність. Низький рівень означає, що зловмисники можуть читати лише обмежені або часткові дані, тоді як високий означає, що зловмисники можуть читати будь-які дані, які їм потрібні, використовуючи вразливість.
  • Integrity (I) — вплив на цілісність, None (N), Low (L) або High (H). Цілісність стосується модифікації даних. Якщо доступ обмежений, то він має низький рівень. Якщо зловмисники можуть змінити будь-які дані – високий рівень.
  • Availablity (A) — вплив на доступність, None (N), Low (L), High (H). Означає, що атака може викликати перебої в роботі і доступності веб-додатка, наприклад відмову в обслуговуванні. Низький означає, що додаток може продовжувати працювати, але відчуваючи високе навантаження і перебої. Якщо ж додаток недоступний доти, поки виконується атака, або довше – обираємо високий рівень.

Підготовка звіту

В результаті проведення вищеперелічених етапів по кожній виявленій вразливості у звіті повинна бути присутня настуна таблиця:

НАЗВА ВРАЗЛИВОСТІ
Класифікація:HIGHCVE-ID, CWE-IDCVSS Score: x.x
Шлях:[hostname]
Опис / Технічні деталі:Proof of Concept (POC)
Підтвердження:Скріншоти
Вплив:Опис впливу
Рекомендації:Список рекомендацій
Джерела:Список джерел

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

  • Огляд вразливостей:
    • Зручність перегляду: Таблиця надає зручний формат для перегляду та аналізу вразливостей.
    • Узагальнена інформація: Усі важливі деталі вразливості зібрані в одному місці, що полегшує розуміння масштабів та серйозності проблеми.
  • Пріоритизація виправлень:
    • Оцінка критичності: CVSS оцінка допомагає клієнту визначити, які вразливості потребують негайного виправлення, а які можуть бути відкладені.
    • Фокусування ресурсів: Клієнт може ефективно розподіляти ресурси для усунення найсерйозніших вразливостей перш за все.
  • Конкретні дії:
    • Рекомендації щодо виправлення: Рекомендації надають чіткі вказівки щодо дій, які слід виконати для усунення або зменшення впливу вразливостей.
    • Патчі та оновлення: Інформація про наявні патчі та оновлення допомагає швидко знайти та застосувати виправлення.
  • Розуміння впливу:
    • Опис впливу: Інформація про потенційний вплив вразливостей на конфіденційність, цілісність та доступність допомагає клієнту оцінити ризики для бізнесу.
    • Експлойтабельність: Відомості про те, наскільки легко експлуатувати вразливість, допомагають зрозуміти терміновість і необхідність виправлення.
  • Планування безпеки:
    • Додаткові примітки: Додаткова інформація може містити корисні поради для покращення загальної стратегії кібербезпеки.
    • Метод виявлення: Розуміння методів виявлення допомагає клієнту вдосконалювати свої інструменти та процеси для майбутніх перевірок безпеки.

👉 Детальніше про підготовку звіту та його приклади читайте тут.

ПОДІЛИТИСЬ У СОЦМЕРЕЖАХ:

Отримати комерційну пропозицію
Оформити заявку
Замовити консультацію

Заповніть, будь ласка, форму й наш спеціаліст зв’яжеться з Вами та надасть безкоштовну консультацію!

Замовити дзвінок

Вкажіть, будь ласка, контактний номер телефону. Наш менеджер миттєво зв’яжеться з Вами!