Я только что начал писать программы сокетов. Пришел знать, что один пакет UDP имеет порт назначения порта источника и некоторый MAC-адрес, представляющий маршрутизатор ..etc. Интересно, почему никто не может создавать пользовательские пакеты с поддельной информацией и отправлять их через Интернет. Я хотел бы знать, насколько безопасны наши ПК. Что нужно сделать для ее защиты?Насколько неуверенным является сеть?
ответ
Есть несколько различных аспектов ответа.
Один из них заключается в том, что Интернет полагается на TCP, а не на UDP. Это означает, что он ориентирован на соединение. Ваш пакет будет отклонен, если он не будет частью существующего соединения (что означает, среди прочего, что он должен иметь правильный IP-адрес источника и порт. И он должен иметь правильный порядковый номер, чтобы он вписывался в окно приема). Конечно, это может быть фальшивка без особых проблем. Но это требует, чтобы вы немного узнали о пакетах, отправляемых по исходному соединению.
Другая часть состоит в том, что всякий раз, когда нам нужно быть уверенным, что отправитель пакета является тем, кем они утверждают, мы используем шифрование. :)
Большинство пакетов действительно не нужно. Это не огромная сделка, если кто-то отправляет запрос в Google, который появляется, чтобы перейти от моего IP-адреса. Но при совершении транзакций по кредитным картам это становится немного более важным.
Большая часть стека TCP/IP «утешает доверие», как я когда-то выразился, и не так много, как вы, разработчик программного обеспечения (если вы ищете программное решение, иначе stackoverflow неправильный форум, перейдите к serverfault или суперпользователю ;-) может сделать это - за вычетом и тщательно реализованных протоколов, которые разумны с точки зрения ожидания безопасности.
HTTPS (с проверкой сертификатов и т. Д.) Является одним из разумно сильных подходов; для более надежной защиты, посмотрите на подходы SSH и VPN. Конечно, никто не должен полагаться на конфиденциальность или сильная аутентификация, если они не предприняли определенные шаги к ней (если они предприняли такие шаги, они могут по-прежнему подвергаться успешным атакам, поэтому использование существующих, более или менее «проверенных» «Решения, такие как HTTPS, SSH, VPN, целесообразны ;-).
Да, любой может создавать пакеты с любыми данными, которые они хотят, и отправлять их через Интернет. Особенно с UDP вы можете притворяться кем угодно, если только ваш интернет-провайдер не выполняет фильтрацию выхода. Исходные адреса для UDP не могут им доверять. Исходные адреса для TCP могут до некоторой степени (вы знаете, что данные должны поступать с рассматриваемого IP-адреса или кого-то по маршруту).
Добро пожаловать в интернет :)
Edit: просто для уточнения выход фильтрации что-то отправки ISP должен был бы сделать. Как приемник, вы ничего не можете сделать, чтобы проверить адрес в UDP-пакете, не обращаясь к отправителю. Единственная причина, по которой вы, по крайней мере, частично доверяете входящему TCP-соединению, - это то, что TCP требует, чтобы поток управляющих данных возвращался к отправителю (и, следовательно, ему нужен действительный IP-адрес/порт, чтобы установить соединение и поддерживать его).
Ну, многие люди создают недействительные пакеты и отправляют их через Интернет; например, читать Ping of death.
A [полностью] защищенный компьютер - компьютер выключен. Чтобы сделать ваш ПК более безопасным из этого типа потока, вы должны полагаться на программные/межсетевые экраны брандмауэра, которые могут обнаружить эти искаженные пакеты.
Пользовательские пакеты с поддельной информацией могут быть легко созданы. Поэтому вы должны убедиться, что вы не уязвимы для них.
- 1. Насколько безопасным или неуверенным является этот код JavaScript, если он запущен на сервере (nodeJS)?
- 2. Насколько дорогостоящим является обнаружение блокировки?
- 3. определить массив с неуверенным размером
- 4. Сеть является недостижимым исключением
- 5. Насколько мощным является Drupal?
- 6. Насколько надежным является HTTP_REFERER?
- 7. Насколько надежным является HttpStatusCodeResult.StatusDescription?
- 8. Насколько точным является TTimer?
- 9. Насколько прост является Path.GetFileName?
- 10. Насколько надежным является ">"?
- 11. Насколько точным является DateTime.AddDays?
- 12. Насколько случайным является уранд?
- 13. Насколько переносимым является mmap
- 14. Насколько масштабируемым является запуск?
- 15. Насколько уникальным является ManagedThreadID?
- 16. Насколько уникальным является socket.id?
- 17. Насколько точным является microtime()?
- 18. Насколько «одноразовым» является ReaderWriterLockSlim?
- 19. Насколько надежным является Microsoft.Expression.Encoder.MediaItem?
- 20. Насколько зрелым является dblinq?
- 21. Насколько масштабируемым является Grails?
- 22. Насколько надежным является «at»
- 23. Насколько надежным является HTTP_HOST?
- 24. Насколько случайным является Random.Next()?
- 25. Насколько зрелым является java.lang.instrument?
- 26. Насколько переносимым является GLib?
- 27. Насколько устойчивым является Groovy?
- 28. Насколько стойким является localStorage?
- 29. Насколько надежным является window.location.hostname?
- 30. Насколько умным является javac?
Вы сказали, что сеть полагается на TCP, но я думал, что некоторый мультимедийный контент работает на UDP. Это верно? – LJM
@fella HTTP - это TCP, в то время как UDP обычно уходит на потоковые медиа и прочее, где не имеет большого значения, если несколько пакетов исчезают из-за нормального сетевого шума. – David
Также обратите внимание, что «Интернет» - это HTTP, который не совпадает с «Интернетом», – lfaraone