본문 바로가기
운영체제

LD_PRELOAD를 이용한 후킹

by meanjung 2021. 7. 8.

할 일

리눅스 유저 영역 후킹..

특정 프로세스에서 나온 패킷만 필터링해야 하는데, 

리눅스에서 python ex.py를 실행하는데, 익스플로잇 코드가 다른 ip를 공격하는 코드라면, send()함수가 있을 것이다.

이때 send를 후킹해서 패킷을 스니핑해야한다.

 

멘토님 말씀.. preload 이용해서 .so 파일 하이재킹해서 후킹해라...

 

나에게 주어진 과제다.

 

일단 후킹이 뭔지 대충이라도 공부를 해봐야겠어서 구글링해서 괜찮은 예제를 찾았다.


리눅스 사용자 모드 후킹 중 'LD_PRELOAD'

ld_preload : 환경변수 중 하나

 

이 변수에 설정된 라이브러리를 기존 라이브러리가 로딩 되기 전에 로딩시킨다.

이때 라이브러리에 중복된 이름의 함수가 있을 경우, ld_preload에 설정된 라이브러리가 먼저 로딩되므로 ld_preload의 라이브러리에서 함수를 호출한다.

 

※ setuid가 걸린 파일에 대해서 ld_preload는 보안상의 이유로 무시된다.

 

 

https://blog.dork94.com/145 이 포스팅을 그대로 따라했음.

 

정리하면, 

main.cpp → strcpy 함수를 포함한 c++ 코드

g++ -o main main.cpp

 

hook_test.cpp → strcpy를 후킹할 라이브러리

 

* dlysm?

라이브러리에서 함수의 이름을 이용해 주소를 찾아 return 하는 함수

void *dlysm(void *handle, const char *symbol);

handle: RTLD같은 flag/ symbol : 함수 이름

 

g++ -fPIC -shared -o hook_test.so hook_test.cpp -ldl

 

LD_PRELOAD=./hook_test.so ./main "This is LD_PRELOAD test"

 


참고

https://m.blog.naver.com/ya3344/221238418657

 

User(유저), kernel(커널) 정리

1. 유저영역과 커널영역 ● 유저영역 하나의 프로세스에 할당되는 메모리 공간의 일부 영역은 프로그램 코...

blog.naver.com

https://sanseolab.tistory.com/28

 

코드 인젝션과 사용자 모드 후킹 [ 윈도우 및 리눅스 ]

0. 개요 1. 윈도우 사용자 모드 후킹 .... 1.1 인젝션 ........ 1.1.1 DLL 인젝션 ................ 1.1.1.1 CreateRemoteThread() ................ 1.1.1.2 NtCreateThreadEx() / RtlCreateUserThread() .........

sanseolab.tistory.com

https://blog.dork94.com/145

 

[Linux] LD_PRELOAD의 이해와 LD_PRELOAD를 이용한 함수 후킹 구현하기

안녕하세요. 오늘은 LD_PRELOAD를 이용해 함수 후킹을 구현해보려고 합니다. 최종적으로 SSL통신을 후킹하기 위해 SSL_write와 SSL_read를 후킹하여 프로그램에서 사용하는 통신을 출력하는 것이 목적입

blog.dork94.com

 

'운영체제' 카테고리의 다른 글

OverlayFS 개념  (0) 2021.07.24
Samba  (0) 2021.07.11
파일 디스크립터  (0) 2021.07.10
공유 메모리  (0) 2021.07.08
리눅스 공유 메모리 개념 및 함수 설명  (0) 2021.07.06

댓글