반응형

분류 전체보기 225

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..

리눅스 PLT와 GOT

PLT (Procedure Linkage Table) : Dynamic Link를 사용 시, 외부 라이브러리에 있는 함수를 연결해주는 테이블. 외부 프로시저를 연결해주는 테이블. PLT를 통해 다른 라이브러리에 있는 프로시저를 호출해 사용할 수 있다. GOT (Global Offset Table) : PLT이 참조하는 테이블로서, GOT에는 라이브러리 함수들의 실제 주소가 있다. PLT가 참조하는 테이블. 외부 라이브러리의 함수/변수의 주소를 담고 있다. 처음으로 함수를 실행한다면 GOT는 함수의 주소를 갖고 있지 않고, 어떤 과정을 거쳐 주소를 알아낸다. 두 번째 호출부터는 첫 번째 호출 때 알아낸 주소로 바로 점프한다. 함수를 실행하기 전 plt address -> got address (jmp pl..

리눅스 메모리 보호기법

리눅스 메모리 보호 기법은 Memory Curruption 공격인 Buffer Overflow를 보호하기 위한 목적으로 생기게 되었다. 메모리 보호 기법은 ASLR, NX, ASCII-Armor, Stack canary가 존재한다. 그럼 이제 각각의 보호 기법들이 하는 역할을 알아보겠다. 첫 번째 ASLR ASLR은 Address Space Layout Randomization의 약어로 메모리 상의 공격을 어렵게 하기 위해 실행 시 스택, 힙, 라이브러리 등의 주소를 랜덤으로 프로세스에게 할당하여 주소 공간을 배치한다. 실행할 때마다 주소 값이 달라지므로 공격자 입장에서는 공격할 주소를 알아내기 어렵게 된다. 아래 그림을 비교해보면 한번 실행한 것과 두 번 실행했을 때 주소 값들이 달라지는 것을 볼 수 ..

반응형