Каковы надлежащие меры безопасности, связанные с открытием порта с помощью Python?

1

Рассмотрим очень простой сокет python, который открывает порт в Интернет на главном компьютере и прослушивает входящие сообщения, которые отображаются в терминале.

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

Благодарю.

  • 3
    У вас есть код, который вы написали до сих пор? Что ты проходишь? Никогда не доверяйте данным, которые вы не очищаете. Зашифруйте что-нибудь чувствительное. Наличие порта прослушивания само по себе не является недостатком, но вам нужно предоставить больше контекста для значимого ответа.
  • 0
    вау, некоторые люди просто не имеют понятия.
Теги:
security
sockets
ports

2 ответа

6

Почему это будет уязвимым? Ваша программа принимает соединения от произвольных людей (возможно, во всем Интернете) и позволяет отображать на вашем компьютере произвольные байты. Здесь есть только один вектор атаки: ваш терминал сам. Если у вашего терминала есть ошибка, которая (например) выполняет байты вместо их печати, тогда система может быть скомпрометирована из-за этой установки.

Однако это маловероятно - на самом деле один общий метод проверки того, что программы не полностью нарушены, - это передать им произвольные данные и посмотреть, как они/как они взрываются. Это называется fuzz-тестированием, и если бы в вашем терминале была такая ошибка, когда она была проверена fuzz, тест fuzz вызывал бы действительно интересные взрывы, а не просто терминальный мусор.

Просто потому, что что-то доступно для Интернета на порту, это не значит, что существует уязвимость. Вам нужен фактический эксплуататорский недостаток, и в этом случае, вероятно, не один. (Хотя никто и не знает.)

1

Что вы пытаетесь обеспечить? Использование Python для прослушивания в сокете не будет напрямую выставлять вас на вуль, если у интерпретатора Python не будет неизвестно.

Обработка входящих сообщений - это другое дело.

Если вы пишете на терминал, означает ли это, что входящие данные должны быть в определенном формате? Как вы анализируете входящие данные? Что произойдет, если кто-то кошки /dev/random в вашем порту и оставит соединение открытым для приятного, долгого времени?

Означает ли порядок или содержание сообщений?

И так далее. Специфика сценария не так много, поэтому рекомендации будут одинаково расплывчатыми. Для начала взгляните на принципы безопасного кодирования OWASP для общих понятий (они применимы, даже если вы не имеете дело с HTTP или HTML).

  • 0
    но интерпретатор может выполнять уязвимую программу ...
  • 0
    да, это различие, к которому я стремился с точки зрения «обработки входящих сообщений». Оригинальный пост был слишком расплывчатым по пути кода между данными, поступающими в сокет и отображающимися в терминале.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню