2009-08-10 4 views
0

예를 들어, 컴파일 된 응용 프로그램의 소켓이 123.456.789.0에 연결되도록 설계되었습니다. 123.456.789.0에 연결된 지 어떻게 확인하나요? 이것을 할 수있는 방법이 있습니까?소켓이 연결된 대상을 확인하려면 어떻게합니까?

아이디어는 다음과 같습니다. 다른 사람들이 내 프로그램을 편집하지 못하도록하고 주소를 예를 들어 127.0.0.1로 변경하고 프록시를 통해 연결하려고합니다.

소켓이 연결된 후 주소를 확인하는 기능/방식/트릭이 있습니까?

+0

작은 nitpick : 예를 들어, 192.0.2.x 주소. http://tools.ietf.org/html/draft-iana-ipv4-examples는 rfc1166보다 명시 적으로이를 정의합니다. 123.456.789.0은 유효한 IPv4 주소가 아닙니다. –

답변

4

getpeername 함수를 사용하여 원격 호스트의 주소를 검색하십시오.

다른 사람이 언급 한대로 프로그램을 수정하면 해당 체크가 잘 변경 될 수 있습니다.

3

nos이 접근법의 불안정성에 대한 의견은 정확하지만 불완전합니다. 제안 된 메커니즘을 우회하기 위해 프로그램 코드를 변경하지 않아도됩니다.

가장 쉬운 방법은 컴퓨터의 네트워크 인터페이스 중 하나에 IP 별칭을 추가하는 것입니다. 그런 다음 프로그램이 연결되어있는 포트의 인터페이스에 프로그램을 바인딩 할 수 있으며 OS의 네트워크 스택은 원격지가 아닌 공격자의 로컬 프로그램에 행복하게 연결할 것입니다.

이제는 이런 종류의 전복을 감지 할 수 있도록 컴퓨터의 인터페이스를 나열하는 방법을 알고 싶다고합니다. 상대방은 카운터 프로세스를 통해 Winsock 호출을 다시 라우팅하는 Winsock 훅을 설치 한 후 프로그램을 하위 프로세스로 시작하여 역습을합니다.

그러면 프로세스 공간에로드 된 특정 DLL의 실행 코드 섹션을 읽는 방법을 묻는 메시지가 표시되어 예상 한 코드인지 확인할 수 있습니다. 이제 상대방이 Winsock 심을 내려 놓고 NDIS 계층 필터로 전환하고 NIC에서 공격하기 바로 전에 프로그램에서 패킷을 다시 작성합니다.

다음으로 Windows 시스템에 설치된 드라이버를 나열하는 방법을 알려주는 사람을 찾고 있습니다. 따라서이 필터 중 하나가 없는지 확인할 수 있습니다. 상대방은 약 6 초 동안 생각하고 패킷 라우팅을 시작하기로 결정합니다. 적어도 내 머리 꼭대기에서 생각할 수있는 세 가지 공격 중 하나를 선택하십시오. (아니, 잠깐, 네.)

나는 보안 전문가가 아니요. 그러나 이것에 대해 5 분을 보냈으며 이미 보안이 7 가지 다른 방법으로 이겼습니다.

죄송합니다. 그럴 수도 있고 아닐 수도 있고.

당신이 볼 수있는 위험에 대한 해결책을 생각해내는 대신, 당신이 무엇을 보호하려고하는지 새로운 질문을 게시하고 위험 및 가능한 수정에 대해 전문가의 의견을 말하도록하십시오. 여기에 추가하지 마십시오. 귀하의 질문에 이미 의 번호는입니다. 다른 질문입니다.)

보안이 어렵습니다. 컴퓨터 과학 분야의 다른 분야보다 전문 분야가 더 중요합니다.

+0

+1 귀하의 의견에 대한,하지만 난 운명 아니에요. 나는 이것을 추가 보호로 사용하고 있습니다.winsock을 포함하여 내 코드의 가장 중요한 부분은 잡기 쉽지 않은 간식 코드로 난독 화됩니다.이 검사의 개념은 주소가 유효하지 않은 경우 요즘은 다른 단계에서 임의의 위치에서 프로그램이 중단됩니다 바보 같은 메시지 상자 대신 '잘못된 주소'같은 것을 사용하면 내 '상대방'에게 더 많은 시간이 소요됩니다. :) –

+0

잠깐, 나는 혼란스러워. 귀하의 질문에 프록시를 통해 누군가가 귀하의 프로토콜을 실행하지 못하도록하고 싶다고 말했습니다. 필자는 원격 피어의 주소가 예상 한 것임을 코드 검사에도 불구하고 다른 누군가의 코드 (프록시)를 통해 트래픽을 강제하는 7 가지 방법 (그리고 게시 후 2 가지 더 많은 방법)을 설명했습니다. 그래서 .... WTF? 그 외에 무명 보안은 결코 작동하지 않습니다. 아마추어는 동기를 가진 상대방을 상대로 보안 전투에서 결코 이기지 못합니다. –