[ftz] level 10: interesting to hack!
10_공유 메모리에 데이터 읽고 쓰기
이번 레벨은 프로세스 간 통신과 관련돼 있다.
* 프로세스 간 통신
- 암복호화키를 하드코딩했을 때 생기는 문제점은 치명적이다.
특히 자바라면, class 확장자 바이너리 파일이 거의 완벽히 원본으로 디컴파일 되기 때문에 암호화 함수는 물론 "키" 값까지 정확히 추출 가능하다.
>> 암복호화 키를 다른 서버에 둔다는 개념을 바탕으로 한 애플리케이션
1. 안전한 키 관리를 위해 외부에 노출된 웹서버와 분리해 독립적인 장소인 키 관리 서버에 키를 따로 둠
2. 키 관리 서버에서 웹서버로 키 전송
3. 웹서버에서는 키를 디스크에 저장하지 않고 메모리의 특정 위치에 둔다.
4. 웹서버에서는 데이터를 저장하고 읽을 때 암복호화 과정에서 메모리의 특정 위치에 있는 키를 읽어서 사용
** 패스워드와 달리 일반 데이터는 양방향 암호화 알고리즘을 사용하여 암복호화
> 해커는 암호화된 데이터와 복호화키를 함께 가져가야 복호화 가능
>> 키 관리가 가장 중요한 화제
* PKI(Public Key Infrastructure): 공개키 기반 암호화 알고리즘
: 대칭키와 비대칭키 방식을 혼용하여 키를 훨씬 효율적, 안전한 방식으로 관리
√ 문제 분석
hint를 보면 암호화 키가 있는 위치는 공유 메모리임을 알 수 있다.
key_t = 7530
공격 대상 파일을 찾아보자.
- level10 디렉토리를 보면 이전에는 볼 수 없던 program 디렉토리가 있어서 확인해보았더니, root 소유인 것을 확인할 수 있다.
>> program 디렉터리에 중요 데이터가 있지 않을까?
- level11 권한으로 SUID 설정된 파일도 없고, level10 권한으로 실행되는 파일 중에는 의심스러운 파일도 없었다.
- 프로그램을 시스템이 시작될 때 자동으로 시작되도록 등록하는 설정에 해당 파일이 있을 수도 있을 것!
>> rc.local 파일을 확인해 보아야 한다.
- /home/level10/program/level10 실행파일이 있음을 확인할 수 있다.
- level10으로 실행 중인 프로세스는 없다. 즉 level10 프로그램은 단순 프로세스이다.
* 데몬 vs 프로세스
- 데몬: 무한히 반복해서 실행되는 프로세스
ex. httpd, telnetd, sshd
일반적인 서버를 생각
- 프로세스: 한 번만 실행되는 프로세스
ex. cat, vi, grep
** 공유 메모리
: 프로세스 간에 공유해서 쓰는 메모리
- 프로세스는 각자 자신만이 사용할 메모리를 할당해서 사용한다. 즉, 다른 프로세스의 메모리 공간은 침범할 수 없다.
- IPC(InterProcess Communication): 프로세스 간에 서로 데이터를 공유해야 하는 필요성 때문에 생김
- 개발 시 함수로 각종 기능 분리하고 함수 간 인자로 데이터 전달하는 것과 개념이 비슷
√ 공격
- shmget() 함수: 공유메모리를 생성하거나 생성된 공유 메모리를 사용할 수 있음
- shmat() 함수: 할당된 공유 메모리 공간을 다른 프로세스에서 사용할 수 있게 권한 부여
cf. malloc()
- shmdt() 함수: 공유 메모리 공간의 사용을 끝낸 후 프로세스와 공유 메모리 공간의 연결을 끊음
cf. free()
Level 11 Password = what!@#$?
* 정리
- 한 프로세스에서 공유 메모리에 값을 저장하고, 다른 프로세스에서 그 값을 읽어서 사용하면
프로세스 사이에서 데이터를 전달하는 프로세스 간 통신이 가능해진다.
'write-up > pwnable' 카테고리의 다른 글
[ftz] level 12: it is like this (0) | 2019.08.21 |
---|---|
[ftz] level 11: what!@#$? (0) | 2019.08.21 |
[ftz] level 9: apple (0) | 2019.08.17 |
[ftz] level 8: break the world (0) | 2019.08.16 |
[ftz] level 7: come together (0) | 2019.08.14 |
댓글