반응형

프로그래밍/C언어를 활용한 네트워크 해킹 6

ARP 프로토콜

0 1 2 3 Hardware Type Protocol Type Hardware Address Length Protocol Address Length OP Code Sender Hardware Address Sender Hardware Address Sender Protocol Address Sender Protocol Address Target Hardware Address Target Hardware Address Target Protocol Address ARP 헤더의 크기는 28 byte이다. Hardware Type은 Ethernet 환경이면 1이 설정된다. Protocol Type은 조회되는 프로토콜이면 IP를 조회하는 것이기 때문에 0x0800 값이다. MAC 주소와 IP 주소의 길이는 각각..

Ethernet 헤더

Ethernet 헤더는 제일 낮은 계층의 프로토콜. 0 1 2 3 Destination Address Destination Address Source Address Source Address Ethernet Type X Ethernet 헤더는 도착지 MAC 주소가 6바이트, 출발지 MAC 주소가 6바이트 그리고 어떤 프로토콜의 데이터를 운반하는지 Ethernet Type 2바이트 필드로, 총 14바이트로 구성된다. Ethernet Type은 리눅스 환경에서 /usr/include/net/ethernet.h 파일에 정의되어있다.

체크섬(Checksum)

체크섬은 전송되는 헤더 및 데이터의 무결성을 보장하기 위해서 사용되며, 기본적으로 데이터의 합으로 계산된다. 통신 프로토콜에서 헤더 및 운반 중인 데이터에 오류가 발생하지 않았는지 확인하는 일반적인 방법은 바로 체크섬을 이용한다. 1. 데이터를 전송할 때 송신 측에서는 체크섬 값을 계산하고 이 값을 데이터와 함께 전송한다. 2. 데이터를 받는 수신 측에서는 송신 측에서 체크섬을 계산할 때와 동일한 알고리즘으로 체크섬을 계산한다. 3. 만약 데이터를 수신하는 쪽에서 계산된 체크섬 값과 수신된 체크섬 값이 서로 다른 값이 나오면 에러가 발생한 사실을 확인할 수 있다. 수신 측에서 데이터를 수신할 때 체크섬 계산 결과가 일치하지 않는다면 해당 패킷은 폐기되기 때문에 패킷을 전송할 때 정확한 체크섬 계산은 패킷..

Packet Capture 라이브러리2

다음은 이어서 전 소스코드 사용했던 pcap_findalldevs() 함수, pcap_freealldevs() 함수를 살펴볼 것이다. pcap_findalldevs() 함수 #include int pcap_findalldevs(pcap_if_t **, char *); 이 함수는 사용자 PC에 있는 모든 네트워크 디바이스 정보를 가져오는 함수이다. 매개변수로는 pcap_if_t 타입의 포인터 변수가 저장된 변수의 주소 값과 에러 메시지가 저장될 버퍼의 주소 값을 전달한다. 전에 사용했던 소스코드를 보면 이 함수를 호출한 뒤, alldevs 변수에 연결 리스트로 검색된 네트워크 카드 정보가 저장된다. pcap_if_t의 구조체는 pcap.h 파일에 정의되어 있다. struct pcap_if { struct ..

Packet Capture 라이브러리

RAW 소켓을 사용하지 않고, 라이브러리를 이용하여 패킷을 캡처하거나 프로토콜 헤더를 직접 작성하여 전송할 수 있다. 유닉스 계열에서 네트워크 패킷 캡처를 위해 가장 많이 libpcap 라이브러리를 사용한다. libpcap은 데이터 링크 계층부터 프로토콜 스택을 통과하는 네트워크 패킷을 캡처할 수 있도록, 네트워크 패킷을 전송할 수 있게 해 준다. 리눅스에서 libpcap 이용하여 네트워크 디바이스 정보를 확인해보자. 첫 번째로 libpcap 라이브러리가 필요하므로 다운로드를 하여보자. #apt-get install libpcap-dev 컴파일할 때는 gcc -o libpcap_test libpcap_test.c -lpcap 이렇게 해줘야 pcap.h 파일을 인식해 컴파일이 된다. 이렇게 실행하면 네트워..

RAW 소켓

RAW 소켓이란 소켓을 생성할 때 지정하는 옵션을 이용하여 데이터를 전송할 때 직접 프로토콜 헤더를 만들고, 데이터를 수신할 때도 프로토콜 헤더를 포함하여 수신하겠다는 의미로 소켓을 생성하는 것이다. 보통 소켓 관련 라이브러리 및 운영체제에서 프로토콜 헤더를 작성하여 직접 작성하지 않아도 되지만, 간혹 직접 다뤄야 하는 경우가 필요하다. 참고로 대부분의 Socket API는 RAW 소켓을 지원한다. 윈도우 XP 경우도 2001년에 출시되었을 때 Winsock 인터페이스를 통해서 RAW 소켓을 지원했다. 하지만, 해커가 RAW 소켓을 이용하여 직접 프로토콜 헤더를 만들어 공격에 사용하였기 때문에 3년 후의 윈도우 XP에서는 RAW 소켓의 사용을 제한하였다. 그래서 윈도우에서 학습할 경우 Packet Cap..

반응형