Java - Каковы уязвимости программы прослушивания портов? - PullRequest
3 голосов
/ 05 марта 2012

Недавно я создал довольно простой IRC-клиент и сервер на Java, но чтобы сделать его полностью функциональным, мне пришлось перенести его вперед.Мне пришло в голову, что, вероятно, возникли некоторые проблемы с безопасностью при открытии портов, поэтому я провел небольшое исследование.Повсюду я встречал людей, которые говорили, что «самая большая уязвимость - это программа, слушающая порт».

Итак, мои вопросы:

  1. Что именно может быть использовано вJava-программа, которая слушает порт и записывает входящие данные в строку?

  2. Как разработчик программного обеспечения, как я могу предотвратить эти уязвимости?

Ответы [ 4 ]

4 голосов
/ 05 марта 2012

Существует множество способов, которыми злоумышленник может воспользоваться известным открытым портом, начиная от использования ошибок в реализации TCP и заканчивая отказом в обслуживании, обманывая сервер до выполнения дорогостоящих вычислений (вспомните недавнюю ошибку 2.2250738585072012e-308?), Вызывая переполнение буфера, что может привести к сбою вашей программы или даже к выполнению произвольного кода.

Безопасность платформы

В некоторых реализациях TCP было несколько уязвимостей в некоторых операционных системах.злоумышленник полагался на знание открытого порта на целевом хосте, например, SYN флуд-атака .Они были в значительной степени смягчены во всех основных операционных системах, но тот, кто отвечает за безопасность вашего хоста, должен постоянно следить за недавними проблемами безопасности в платформе.

Безопасность сервера

Помимо уязвимостей в реализации ОС и TCP, существуют также потенциальные проблемы, связанные с самим сервером.Если ваш сервер может выполнять связанные с безопасностью операции в ответ на полученные запросы, злоумышленник может воспользоваться этим.К ним относятся чтение и запись файлов, выделение больших кусков памяти, отправка запросов в базы данных и т. Д.

С точки зрения разработчика

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

С точки зрения администратора

Критическим моментом является то, чтобы убедиться, что последние обновления безопасности в ОС были применены, что ваш серверна самом деле работает с наименьшими возможными привилегиями и неспособностью исчерпать критические системные ресурсы (например, ЦП, ОЗУ, дескрипторы открытых файлов, открытые соединения TCP и т. д.).

4 голосов
/ 05 марта 2012

Открытие порта, чтение входящих байтов и сохранение их в строке безопасно с Java.Просто будьте готовы получить незаконный или «вредоносный» контент.Тривиальный пример: приложение использует полученные байты для запросов к базе данных, и кто-то отправляет «SQL-код внедрения» ...

Существует больший риск с языком программирования, где возможно переполнение буфера.Тогда один может использовать соединение, чтобы ввести и выполнить машинный код - если прослушивающее приложение уязвимо.

Предотвращение довольно легко: проверьте ввод и отбросьте каждое недопустимое сообщение.Добавьте несколько тестов, которые отправляют нелегальный контент, и проверьте, правильно ли отклонены эти входные данные.

3 голосов
/ 05 марта 2012

Уязвимости заключаются в несанкционированном использовании вашей программы.Теоретически «плохой парень» может выполнить обратный инжиниринг вашего проводного протокола, понять, как работает ваша программа и заставить ее делать «плохие» вещи.Например, если ваша программа может удалять файлы на диске, когда она получает команду удаления, злоумышленник может отправить эту команду с параметром /, поэтому программа удалит все файлы с диска.

Вы можете представить себе другие сценарии.

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

Чтобы предотвратить такой сценарий, вы должны хорошо спроектировать свой протокол, использовать механизм аутентификации и (возможно) шифрование проводного протокола.

0 голосов
/ 05 марта 2012

Еще одна группа атак - DOS-атаки.Это не характерно для java, но java IMO не защищает вас от: - Злоумышленник может посылать огромные / бесконечные входные данные для сбоя вашего приложения.- Злоумышленник может отправить импут медленно, чтобы использовать ваши ресурсы.

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