<h1>Особенности работы отдела безопасности сетевых (WEB) приложений</h1>
**#1**
Дано:
Стенд по адресу: х.х.х.х
Необходимо провести blackbox recon данного узла. Ответ оформить в виде advisory.
1. Какие tcp порты открыты.
4. Сколько сервсиов(ПО) доступно на данных портах. Назвать не менее 5.
5. Собрать максимально возможную доступную информацию о каждом найденном сервисе.
**#2**
Представлен код безопасных проверок на уязвимости: Check1 и Check2. Ответы можно предоставить как ответы на вопросы в развернутом виде, так и в виде advisory.
1. Разобрать код. Что он делает и зачем. В чем заключается специфика безопасной проверки.
2. Наличие каких уязвимостей проверяют Check1 и Check2
3. Check1: что должно быть вместо строки ???????????????????????????, чтобы вынести вердикт о наличии уязвимости
4. Какими еще методами можно удаленно проверить на наличие уязвимостей.
5. Какие достоинства, риски и ограничения у предложенных методов.
### Задание 1
Для выполнения данного задания воспользуемся такими сканерами как nmap и nikto
Первые 4 сервиса найдет nmap а для скана nginx воспользуемся nikto
Команды для скана nmap :
```
nmap -A -p- -sV --min-rate 10000 10.90.192.19
nmap -vv -p21,22,2200,4433 -sV --script vulners.nse 10.90.192.19
```
Команда для скана nikto:
```
nikto -host 10.90.192 -port 4433
```
| № | Порт | Сервис | Версия | уязвимость - критичность | информация |
| - | ---- | ------ | ------------------------------- | ------------------------- | ----------- |
| 1 | 21 | ftp | vsftpd | | На данном сервере включен анонимный режим  |
| 2 | 22 | ssh | OpenSSH 8.2p1 Ubuntu 4ubuntu0.5 | CVE-2020-15778 - 6.8, <br> C94132FD-1FA5-5342-B6EE-0DAF45EEFFE3 - 6.8, 10213DBE-F683-58BB-B6D3-353173626207 - 6.8, <br> CVE-2020-12062 - 5, CVE-2021-28041 - 4.6, CVE-2021-41617 - 4.4, CVE-2020-14145 - 4.3, CVE-2016-20012 - 4.3, CVE-2021-36368 - 2.6 | ssh-hostkey: 3072 6d:c2:10:f3:10:b7:43:44:73:0d:0b:29:67:c5:52:11 (RSA) <br> ssh-rsa: AAAAB3NzaC1yc2EAAAADAQABAAABgQC01AP60Wt<br>prJ0z64qnBmnXeDwtEWMP9vXlfTWI0wDgqSwAMx7kD<br>lNfzxDS+1dKoiknYArh6S3RJeIZAAQdxkyCwel4doJMGjngoC/CLA5ZGm2pGpy> <br> 256 81:f0:da:d2:b4:02:88:36:c8:94:99:37:85:47:e4:2f (ECDSA) <br> ecdsa-sha2-nistp256: AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbml<br>zdHAyNTYAAABBBA5nnoY9VxrsbeszaaC2Ls05CBqJBD9lo1r0+gOUu9FUH<br>mcE0hhcVfGlVTYfravTPHz0LCjPMKVhKAo> <br> 256 dc:5a:72:1f:b0:e8:94:97:16:00:b2:d3:b4:ba:4f:27 (ED25519) <br> ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIENfWmgmPJKaBpQ/sTeR6neClFxWwx40+o53b32a5GFs |
| 3 | 2200 | ssh | OpenSSH 5.9p1 Debian 5ubuntu1.4 | SSV:60656 - 5.0, <br> CVE-2018-15919 - 5.0, <br> CVE-2010-5107 - 5.0, <br> SSV:90447 - 4.6, <br> CVE-2016-0778 - 4.6, <br> CVE-2020-14145 - 4.3, <br> CVE-2016-0777 - 4 | 3072 fc:0a:5a:fd:d0:ee:cc:b6:1f:1e:c7:ee:00:fe:b5:d5 (RSA) <br> ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDXX8oh2D1yE1Y+g7A4D0Z11EQKd76qGH4ZIdFBTQYImGaH01K9t<br>aquC9PpPWGB+9rLPjXSh2UH9rUELE50bjivkFYtWPfpnHgNqgHBx5auRLHMratCYm1kP0czZ+A9vk<br>ChwbTTT1qBb380omfkV05WU21k1WZCvr5wMOn2lLKZtL8eL9qPRWjUiKqHQvQdBdZPfvj3dejomXG<br>33NdR5yawsOHG9xiny/feoZFFuf/nt3gfnBAbONLz4a16VhAf23Ro+eSiRgPqRlFuK38lrBM0QAYv<br>YchEuhTSHh7yMFqZ93Hq4nMFxYlSvQGtHXKQ9+B/wlzy/JgC3RmmrxOQpHsugNXxGvh1gZ965aQb4<br>QqYy6QU1VGaeLzFdmaC41c5U0hPaCsYYaaJTl3ZMVjfyO6rbrhXs0JEQV7Sn1zMAHYO5MIcJ+0cRT<br>6cK7OC/ASne9GG60kRXlvEiXUFhj7elJvmNxFOXQejImMuvbgbGvcK7u23X16aTwpauTtvNiGexM0= |
| 4 | 4433 | http | Apache httpd 2.4.41 | CVE-2022-31813 - 7.5, CVE-2022-23943 - 7.5, CVE-2022-22720 - 7.5, CVE-2021-44790 - 7.5, CVE-2021-39275 - 7.5, CVE-2021-26691 - 7.5, CVE-2020-11984 - 7.5, <br> 1337DAY-ID-34882 - 7.5, <br> FDF3DFA1-ED74-5EE2-BF5C-BA752CA34AE8 - 6.8, CVE-2021-40438 - 6.8, CVE-2020-35452 - 6.8, <br> 8AFB43C5-ABD4-52AD-BB19-24D7884FF2A2 - 6.8, 4810E2D9-AC5F-5B08-BFB3-DDAFA2F63332 - 6.8, <br> 4373C92A-2755-5538-9C91-0469C995AA9B - 6.8, <br> 0095E929-7573-5E4A-A7FA-F6598A35E8DE - 6.8, <br> CVE-2022-28615 - 6.4, <br> CVE-2021-44224 - 6.4, <br> CVE-2022-22721 - 5.8, CVE-2020-1927 - 5.8, CVE-2022-30556 - 5, CVE-2022-29404 - 5, CVE-2022-28614 - 5, CVE-2022-26377 - 5, CVE-2022-22719 - 5, CVE-2021-36160 - 5, CVE-2021-34798 - 5, CVE-2021-33193 - 5, CVE-2021-30641 - 5, CVE-2021-26690 - 5, CVE-2020-9490 - 5, <br> CVE-2020-1934 - 5, CVE-2020-13950 - 5, CVE-2019-17567 - 5, CNVD-2022-53584 - 5, CNVD-2022-53582 - 5, CVE-2020-11993 - 4.3, <br> 1337DAY-ID-35422 - 4.3| http-title: Apache2 <br> Ubuntu Default Page: It works <br> ssl-cert: Subject: <br> organizationName=Com/stateOrProvinceName=MSK/countryName=RU <br> http-server <br> header: Apache/2.4.41 (Ubuntu) <br> tls-nextprotoneg: http/1.1 <br> tls-alpn: http/1.1 <br> Public Key type: <br>Public Key bits: 2048 <br>Signature Algorithm: <br>MD5: 9198 706c 09b3 6eb9 2aac 91a7 49d1 8072 <br>SHA-1: a71c 56bf 65b6 2909 e580 e017 aaf3 0110 b339 5d6b <br>-----BEGIN CERTIFICATE----- <br>MIIDfTCCAmWgAwIBAgIUfUBXZrEtweB5YcpYgSpLu4ka70QwDQYJKoZIhvcNAQEL <br>BQAwTjELMAkGA1UEBhMCUlUxDDAKBgNVBAgMA01TSzEMMAoGA1UEBwwDTVNLMQww <br>CgYDVQQKDANDb20xFTATBgkqhkiG9w0BCQEWBjFAMS5ydTAeFw0yMjA4MDMwOTQ0 <br>NTNaFw0yMzA4MDMwOTQ0NTNaME4xCzAJBgNVBAYTAlJVMQwwCgYDVQQIDANNU0sx <br>DDAKBgNVBAcMA01TSzEMMAoGA1UECgwDQ29tMRUwEwYJKoZIhvcNAQkBFgYxQDEu <br>cnUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCwpsVM8jKUb1n3TJF/ <br>uSGCZgus8eqEfYlCIi8dryFOTunJk2IKdqHVl8vEDjbLzXakPCR6P5X3tAYv2fOa <br>tOfACETPUTdjmLc/l71SeLUN7lPoRP2r9UQsPCENHOxwU3o3E6iRb9iCTd0WSyCC <br>gwzFb3eUXzbib3wJo9A+iJWL+c+gXZLz1v1Km4duVjy59yp1qAceNWAJ+nxDMaQx <br>Ta3Xeo+b7TtS9mWgaWOOD3mi1er8b8Piwj5UrLM+aZSxrP9IBuTlaKDDHShSbG4D <br>T1uCsQKVT53tGshCqWiH80Y1dOD1BLK0JP1kwa+yIw5PMiZPw2miJ5iFNFac271y <br>BTKFAgMBAAGjUzBRMB0GA1UdDgQWBBRdT/x8mZ1D9fjrORNmzHbw12f9OzAfBgNV <br>HSMEGDAWgBRdT/x8mZ1D9fjrORNmzHbw12f9OzAPBgNVHRMBAf8EBTADAQH/MA0G <br>CSqGSIb3DQEBCwUAA4IBAQCfEOs+XwayKb34GypvbhWvdnOmZVPKVzKptEK1CUNp <br>qqfMusQ57yVbbZbUNCoEtuJvMFnbR/u7CdYgDaJRyamunJ5AADAaJAYw3oQjROml <br>dowrXSjzf6+1tlmODcwwmqP57xeF3NqNRRlWXgmie2Xgbremufms18XtZX0EZCG5 <br>CXHzFMqDldG3LErNbUxNTWS7aEE2ShTH5PcuzRIb6aHmwj3WIChN3EeJTR7hvLAF <br>D1zIKl7bHiS4Rz6q99MK2Or/72EGXBt/ce67rux1cEW50JTDvTtDpvaDUffvJcwI <br>ew6VYADn9qMG7IexXdwAZDm4C8LBb4UvlgflgrSOwNX3 <br>-----END CERTIFICATE----- <br>http-server-header: Apache/2.4.41 (Ubuntu) <br>tls-alpn: http/1.1 |
| 5 | 4433 | http | nginx/1.18.0 (Ubuntu) | XSS, <br> BREACH | |
Советы по улучшению безопасности: обновить nginx, apache, и оба OpenSSH до посленей версии, дальнейшие советы зависят от конфигурации.
### Задание 2.1
```
void Check1(host, port) // данный чек проверяет наличие CVE-2022-27228
{
string iid;
string sess; // объявление переменных
HTTPReply reply = HTTPGETRequest(host, port, "/bitrix/tools/composite_data.php", "Connection: keep-alive"); // формирование Get запроса
if (reply.code == 200) //проверка есть ли подключение
{
boost::regex pattern;
pattern = boost::regex(".*PHPSESSID=([\\d\\w]+).*'bitrix_sessid':'([\\d\\w]+?)'.*", boost::regex_constants::icase); // получение cookie: phpsessid
boost::smatch what;
if (boost::regex_match(reply.fullreply, what, pattern))
{
sess = string(what[1].first, what[1].second);
iid = string(what[2].first, what[2].second);
} // получение параметров sess,iid
if (sess.empty() || iid.empty()) // проверка на наличие заполненности поля name=""
{
printf("Prereq fail %s", reply.fullreply.c_str());
return;
}
HTTPReply replyPost = HTTPPOSTRequest(plugin, GetServerName(plugin), "/bitrix/tools/vote/uf.php?attachId[ENTITY_TYPE]=CFileUploader&attachId[ENTITY_ID][events][onFileIsStarted][]=CAllAgent&attachId[ENTITY_ID][events][onFileIsStarted][]=Update&attachId[MODULE_ID]=vote&action=vote", //post запрос на добавление агента
"--db7314ff402791dd7fd88f6570d622c1\r\nContent-Disposition: form-data; name=\"sessid\"\r\n\r\n" + iid, "Cookie: PHPSESSID=" + sess + "\r\nContent-Type: multipart/form-data; boundary=db7314ff402791dd7fd88f6570d622c1");
if (replyPost.code == 200 && replyPost.fullreply.find("???????????????????????????") != string::npos) //вместо ?????????????????? я считаю необходимо поставить Agent&attachId или же проверку создался агент или нет, так как данная атака невозможна если :
//1. нету доступа к файлу uf.php
//2. неизвестно время сервера и его часовой пояс
//3. нету ни 1 агента
{
printf("Vulnerable");
return;
}
else
{
printf("Not Vulnerable");
return;
}
}
}
Эксплуатация данной уязвимости дает возможность выполнение произвольного php кода, до исполнения кода командной оболочки ОС.
DWORD Check2(ip, port) // данный чек проверяет уязвимость CVE-2022-20795
{
UdpDtlsSocket udp_dtls_sock(ip, port); //проверка подключения к сокету
if (!udp_dtls_sock.DtlsConnect())
return false; //проверка подключения к сокету
Buffer notVulnRecv("\xff\xff\x00\x80");
Buffer sendValidProbe("\x05\x00\x06\x00\x00\x00\x41\x00\x01\x00");
Buffer sendVulnProbe("\x05\x00\x06\x00\x00\x00\x41\x00\x01\x00\x00");
Buffer recvMsg; // объявление переменных
printf("[*] Sending vulnerable package..."); // сообщение об отправлении уязвимого пакета
if (!udp_dtls_sock.DtlsWrite(sendVulnProbe)) //проверка отправки уязвимого пакета
return false;
bool rc = udp_dtls_sock.DtlsRead(recvMsg); // попытка dtls аутентификации
if ((rc && recvMsg.Size() < 4) || (rc && recvMsg.SubBuf(recvMsg.Size() - 4, 4) != notVulnRecv)) //проверка размера полученного сообщения: если полученное сообщение меньше 4байт или после уменьшения его размера на 4 байта не соответствует notVulnRecv то уязвимость есть
{
printf("Vulnerable");
return true;
}
if (rc && recvMsg.Size() >= 4 && recvMsg.SubBuf(recvMsg.Size() - 4, 4) == notVulnRecv) //проверка размера сообщения: если оно больше 4 байт и после уменьшения его размера на 4 байта оно соответствует notVulnRecv
{
return false;
}
printf("[*] Sending package..."); // сообщение об отправке пакета
if (!udp_dtls_sock.DtlsWrite(sendValidProbe)) //отправка пакета, который не содежржит уязвимость
return false;
recvMsg.Clear(); // очистка полученного сообщения
rc = udp_dtls_sock.DtlsRead(recvMsg); попытка повторной dtls аутентификации
if (rc) {
printf("Vulnerable"); // сообщение об уязвимости: данная уязвимость связана с использованием протокола dtls который создает нагрузку на сервер из-за использования криптографии на сервере
return true;
}
return false;
}
Уязвимость в реализации протокола Datagram TLS может позволить
удаленному злоумышленнику без аутентификации вызвать высокую загрузку ЦП,
что приводит к DOS'у из- за неоптимальной обработкои, которая возникающет при установлении DTLS-туннеля как
части соединения AnyConnect SSL VPN. данная уязвимость реализуется благодаря
постонной отправке DTLS трафика, таким образом злоумышленник может исчерпать ресурсы устройства,
что приводит к блокировке создания новых DTLS туннелей и прекращение передачи трафика по существующим
```
Специфика безопасной атаки основывается на послании сайту нетипичных запросов которые не ведут к дальнейшему отказу в обслуживании, как мы видим в 1 и во 2 чекере не происходит дальнейшая реализация атаки, а проверка остановилась на отсылке нетипичного запроса.
### Задание 2.4-5
SAST и DAST
SAST Static Application Security Testing — тестирование «белого ящика». Данный метод помогает найти уязвимости безопасности в исходном коде приложения без фактического выполнения кода.
Преимущества: не нарушает работу приложений, автоматическое выявление критических уязвимостей, таких как переполнение буфера, SQL-инъекция, межсайтовый скриптинг и т.д.
Недостатки: не обнаруживает ошибки времени выполнения, плохо работает с библиотеками и фреймворками.
DAST Dynamic Application Security Testing — тестирование «черного ящика». Помогает обнаружить уязвимости места в работающем приложении за счет использования методов внедрения ошибок в приложение.
Преимущества: позволяет обнаружить проблемы аутентификации и конфигурации сервера, недостатки, видимые только при входе известного пользователя,не привязан к языкам программирования.
Недостатки:технологии DAST не позволяют отмечать ошибки кодирования точно до номера строки кода,может нарушить работу приложения.
Фаззинг – методика тестирования, при которой на вход программы подаются невалидные, непредусмотренные или случайные данные.
Проверки можно делать при помощи фаззера. Можно Фаззить сайты, можно фаззить протоколы. Описываем модель данных: делаем фаззер умнее, рассказываем ему о структуре файле или протокола (размерах полей, смещениях), с которым предстоит работать. Думаю действенный метод.
Выделяется три подхода к выявлению недостатков системы: тестирование методом черного, серого и белого ящиков. Различие между ними определяется теми ресурсами, которые доступны во время тестирования.
Достоинства:
Уже написанные скрипты сэкономят время
Первично могут подсказать, где возможно находится уязвимое место
Автоматизировано
Недостатки:
Есть вероятность понять в какую сторону двигаться, но что-то более углубленное с ним не попробуешь
Скрипты на разных фаззерах делают одно и то же, разнообразия не получить
Пытаться внедрять тестировать вручную (можно получить базовые знания на Portswigger’е).
Достоинства:
Твой скрипт возможно будет непохожим на другие
Можно делать необычные запросы, использовать нестандартные подходы
Если известно что-то о машине, можно кодить и проверять конкретные вещи
Недостатки:
Время поиска, то есть если это blackBox recon, то лучше использовать Fazzer для начала иначе можно потерять времяger