write-up/pwnable

[ftz] level 10: interesting to hack!

여니두 2019. 8. 18.

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()

 

lv10_attack.c

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

댓글