열린 포트를 갖는 것이 왜 나쁜가?


36

항상 저를 당황스럽게 한 것이 있습니다. 컴퓨터에 포트가 열려있는 것이 왜 나쁜가요? 컴퓨터 나 다른 프로그램에서 바이러스를 가지고 있지 않다고 가정하면 실제로 포트가 열려 있으면 왜 문제가되는 포트를 수신 하는가? 일부 악의적 인 사람이 패킷을 포트로 보내기 시작하지만 데이터를 수신하고 그와 관련하여 아무것도 할 수없는 이유는 무엇입니까? 컴퓨터는 수신 한 데이터를 임의로 실행하지 않습니다. 패킷으로 컴퓨터를 넘치면 데이터 양을 처리 할 수 ​​없어 충돌이 발생할 수 있음을 이해하지만 실제로 컴퓨터의 파일을 변경하는 보안 문제 만 고려하고 있습니다.

최신 정보

지금까지 답변 주셔서 감사합니다. 포트가 열려 있다는 것은 실제로 해당 포트에서 수신 대기하는 프로그램이 있다는 것을 이해합니다. 그러나 악용 될 수없는 소프트웨어를 작성하는 것이 왜 그렇게 어려운가? 컴퓨터에 실제로 해를 끼치기 위해 프로그램이 하나 이상의 파일을 업로드하도록 허용 할 필요는 없으며 해당 파일 중 하나를 실행해야합니다. 실수로 허용하기가 엄청나게 어려울 것 같습니다.

답변:


36

무언가 연결이 수신되지 않으면 포트가 열리지 않습니다.

모든 포트를 어디에서나 열 수없는 나쁜 이유는 해당 포트에서 수신 대기중인 서비스를 익스플로잇에 노출시키기 때문입니다. 그렇기 때문에 방화벽이 존재하여 서비스에 의해 노출되는 노출 영역을 줄이기 위해 특정 포트에 대한 연결을 제한합니다.


편집하다

사람들이 악용 할 수없는 소프트웨어를 작성할 수없는 이유에 대한 질문을 해결하려면 :

이것은 간단한 프로그램에서는 매우 쉽지만 소켓이 필요한 많은 프로그램은 복잡합니다. 따라서 많은 구성 요소가 있으며 대부분 구성 요소가 포함되어 있습니다 (라이브러리 포함). 방화벽과 같이 스스로 사용할 수있는 강화 방법이있을 때는 다른 사람에게 의존하여 네트워크 보안을 유지할 수 없습니다.

당신이 지적했듯이 임의 / 원격 코드 실행은 큰 위험입니다. 불행히도 버퍼 오버플로와 일반적인 보안 결함이 있습니다. 모든 Microsoft 보안 업데이트를 살펴보면 원격 코드 실행 또는 권한 상승을 패치 할 것입니다. MS는 수백 명의 개발자와 수십억 달러를 보유한 거대한 회사입니다.


4
추가 : 예를 들어 서비스에 코드 나 기타 코드에 침투하는 데 사용될 수있는 버그가 있고 실제로이 서비스가 실행되고 있음을 확인한 경우 공개 초대입니다.)
Felix

9

작성한 업데이트와 관련하여 :

지금까지 답변 주셔서 감사합니다. 포트가 열려 있다는 것은 실제로 해당 포트에서 수신 대기하는 프로그램이 있다는 것을 이해합니다. 그러나 악용 될 수없는 소프트웨어를 작성하는 것이 왜 그렇게 어려운가? 컴퓨터에 실제로 해를 끼치기 위해 프로그램이 하나 이상의 파일을 업로드하도록 허용 할 필요는 없으며 해당 파일 중 하나를 실행해야합니다. 실수로 허용하기가 엄청나게 어려울 것 같습니다.

그것은이다 매우 악용 될 수 없음을 쓰기 소프트웨어 어렵다!

보안 소프트웨어 구축 이라는 책을 읽었으며 여기에서 논의한 것은 스택 오버플로를 이용하는 것입니다. 거기에는 두 가지 매우 무서운 사실이 있습니다.

  • 프로그램이 악용 가능한 스택 오버플로 버그를 갖는 경우, 특히 프로그램이 C로 작성된 경우 매우 쉽습니다. C 프로그래밍 언어에서는 기본적으로 많은 기능이 안전하지 않으며 프로그래머는 취약한 기능을 피하기 위해 알아야합니다 안전을 위해 특별한 조치를 취해야합니다.
  • 해커가 사용해야하는 악용은 매우 짧습니다. 어셈블리 언어 페이지의 절반 미만으로 100 바이트 정도의 기계 코드로 번역됩니다. 이 악용 코드는 해커 셸 (명령 프롬프트)에 컴퓨터에 대한 액세스 권한을 부여하기에 충분합니다. 큰 파일 업로드 및 실행이 필요하지 않습니다. 합법적 인 데이터의 중간에 삽입 할 수있는 아주 작은 코드입니다.

따라서 해커가 (a) 네트워크를 통해 악용 될 수있는 스택 오버플로 버그가 있고 (c) 버퍼에 100 바이트의 여유 공간이있는 프로그램을 발견하면 컴퓨터가 잠복됩니다. 다행히도 스택 오버플로 버그에 대한 지식은 현재 매우 일반적인 지식이지만 여전히 나타납니다. 5 년 전과 그 이상이 훨씬 더 빈번한 문제였습니다.

원래 질문으로 돌아 가면 프로그램의 악용 가능한 버그로 인한 사고를 피하기 위해 열린 포트를 피해야합니다. 이제 두 번째 이유가 있습니다. 해커가 사용할 원격 셸이 다른 열린 포트입니다. 특별히 허용 한 것을 제외하고 모든 것을 차단하는 방화벽이 있다면, 해커는 여전히 컴퓨터에 다른 불쾌한 일을 할 수 있기 때문에 원격 쉘을 차단할 수 있습니다.


2
단지 수학적으로 작은 프로그램 중 하나는 그가 버그가 무료라고 쓰고, 그 사람이 년이 걸린 것을 증명 완료 IIRC, 도널드 크 누스 (?)
RCIX을

7
  • 열린 포트 : 누군가가 물으면 컴퓨터는이 포트에서 수신 대기하는 서비스가 있다고 응답합니다. 이것은이 포트로 들어오는 모든 것이 해당 컴퓨터에서 실행되는 프로그램 (서비스)에 의해 처리됨을 의미합니다.
  • 닫힌 포트 : 다른 사람이 요청할 때 컴퓨터는 해당 포트에서 수신 대기하는 서비스가 없다고 응답합니다. Akser는 주소에 응답하는 컴퓨터가 있음을 알게됩니다.
  • 스텔스 포트 : 누구든지 물어 보면 응답이 없습니다. 요점은 주소에 컴퓨터가 있다면 숨기는 것입니다. 그러나 코멘트에서 joschi가 삐걱 거리는 것처럼 그것은 효과적이지 않을 수 있습니다 .

열린 포트가있는 경우 들어오는 항목을 처리하는 프로그램에 사용 가능한 익스플로잇이없는 것이 안전합니다. 그러나 익스플로잇은 항상 발견되며, 네트워크를 통해 많은 포트 스캔이 수행되어 대상을 찾는 것이 좋습니다.

닫힌 포트는 여전히 akser에 응답하므로 공격자는 다른 포트를 계속 확인해야합니다. 그리고 다시 인터넷이 작동하는 방식입니다. 스텔스 포트는 잠재적 인 공격자에게 정보를 제공하지 않으려 고하지만 이론 상으로는 사양을 위반합니다.

보안 관점에서 볼 때 모든 개방 포트는 외부 데이터를 처리하는 데 코드가 사용되기 때문에 큰 차이가 있습니다. 방화벽 (또는 NAT 라우터)은 시스템에 일부 열린 포트가 있어도 들어오는 트래픽이 컴퓨터에 전달되지 않도록합니다. 이런 식으로 모든 포트를 효과적으로 닫습니다.


1
"스텔스 포트"에 대한 당신의 정의는 희망적인 생각입니다. 실제로 공격자는 아무런 응답을받지 못하면 컴퓨터가 있다는 것을 알고 있습니다. 해당 특정 IP 주소에 컴퓨터가 없으면 이전 라우터는 이에 대한 메시지를 보냅니다. "스텔스 포트"는 발생하지 않습니다 ...
joschi

@ joschi : 글쎄, 그것은 인터넷에서 본 개념이므로 그것을 정의하는 것이 좋다고 생각합니다. 그래도 좋은 지적입니다. 귀하의 의견을 반영하여 답변을 수정했습니다. 적어도 대상 IP가 NAT 라우터 뒤에있는 것처럼 보이게합니다. 나는 스스로 개념의 팬이었던 적이 없다. 만약 당신이 열린 포트를 가지고 있다면, 안전한 서비스를 실행하고 있는지 확인해야한다. 그리고 열린 포트가 없다면, 네트워크에 존재한다고 알려주는 데 아무런 문제가 없습니다. 스텔스는 나에게 보안 과장 같은 냄새가 난다.
Ilari Kajaste

joschi : 모든 라우터가 그렇게하는 것은 아닙니다. 많은 라우터는 시스템이없는 IP 주소로 맹목적으로 전달합니다. 클라이언트가 3 방향 핸드 세이크를 시도하는 것에 지루해지기 때문에 연결 시도는 단순히 시간 초과를 시도합니다.
benc December

6

실제로 내가 아는 한 열린 포트는 프로그램이 듣고 있다는 것을 의미합니다. 따라서 데이터를 처리하는 서비스가 있습니다.


3

컴퓨터 나 다른 프로그램에서 바이러스를 가지고 있지 않다고 가정 하면 실제로 포트가 열려 있으면 왜 문제가되는 포트를 수신 하는가? 일부 악의적 인 사람이 패킷을 포트로 보내기 시작하지만 데이터를 수신하고 그와 관련하여 아무것도 할 수없는 이유는 무엇입니까?

가정은 모든 효과의 어머니입니다 :)

죄송합니다. 오히려 makeuseof.com에서 읽어보세요 :

기술 설명 : 개방형 라우터 포트 및 보안 영향


좋은 짧은 읽기.
DaveParillo 2009

1

보안 내보내기는 아니지만 약간의 조사를 수행했습니다. "열린"포트는 들어오는 TCP 연결을 수락하도록 설정된 포트입니다.

포트 9, 21 및 80에서만 수신 대기하는 앱이 있고 방화벽이이 세 포트에 대한 액세스를 차단하는 경우 기술적으로 포트가 열려 있지 않은 것입니다. 예를 들어 IOW, 포트 25는 아무 것도 듣고 있지 않으므로 열려 있지 않습니다.

귀하의 질문에 대답하려면 : 컴퓨터에서 열린 포트를 갖는 것이 나쁜 이유는 이러한 포트를 쉽게 발견 할 수 있고 일단 발견 된 포트는 이제 청취 응용 프로그램의 취약성에 취약하기 때문입니다.


포트가 무엇인지에 대한 정의가 잘못되었습니다. 포트는 어떤 식 으로든 TCP로 제한되지 않습니다.
MDMarra

1
나는 그들이 인터넷에서 읽은 모든 것을 믿지 말아야한다고 가정합니다. 구글 검색 결과 상위 6 개 중 5 개는 정의에 "TCP"라고 명시되어 있습니다. google.com/…
Shoeless

아니요, TCP / IP라고합니다. 큰 차이. TCP / IP는 UDP를 포함합니다
MDMarra

1
ICMP는 포트를 사용하지 않으며 IP 프로토콜 제품군에 포함 된 계층 3 프로토콜입니다.
MDMarra 2009

1
내가 말하는 유일한 이유는 방화벽과 관련하여 매우 중요하기 때문입니다 (간접적으로 관련되어 있음). TCP는 상태 저장 상태이므로 UDP가 아닌 연결은 기억됩니다. 여러 번 이것은 내부적으로 설정된 TCP 연결에 대해 발생하지 않아도되는 내부에서 시작되는 리턴 UDP 트래픽을 위해 포트가 열려 있어야 함을 의미합니다.
MDMarra

0

같은 이유로 집에서 문과 창문 을 닫고 잠그는 것입니다.


3
차가워서 문과 창문을 잠그고 있어요. 이 질문은 단열재와 어떤 관련이 있습니까?
quack quixote

2
문과 창문이 닫힌 경우 단열되지 않습니까? 여분의 볼트가 실제로 훨씬 더 많은 단열을 제공합니까?
Dentrasi 2009

좋은 지적이지만, 모든 사람이 집에서 문과 창문을 잠그는 것은 아닙니다. 이것은 여러분의 관점에 따라 "모두가 자신의 재산을 보호하기를 원하는 것은 아닙니다" 또는 "모두가 두려워하는 문화에 살고 싶어하는 것은 아닙니다"일 수 있습니다 .
Ilari Kajaste 2009

-2

열린 포트는 열린 창과 열린 문과 같지만 창문이 열렸을 때 강도 또는 쥐가 있고 거미가 들어올 수 있다고 말합시다. 인터넷에는 열린 포트가 있다고 생각합니다. 닫힌 포트는 창없이 닫힌 창입니다. 연결하거나 탐색 할 수 없습니다 HTTP 및 SSH 또는 FTP처럼 추측하지 않으면 연결할 수 없습니다. 클라이언트이므로 TCP 연결입니다.

보안 전문가 없음


서비스를 제공하려면 개방 포트가 필요합니다. 가능한 한 예를 들어, Gmail은 열린 포트 (HTTPS를 사용하는 웹 사이트의 경우 443)를 사용합니다. 그러나 아무것도 표시하기 전에 로그인하라는 메시지가 표시됩니다.
Arjan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.