본문 바로가기
시스템 해킹/FTZ

trainer10

by sonysame 2016. 9. 6.

Local 해킹시 핵심이 되는 SetUID에 대하여 알아봅시다.


Local 해킹?

해킹에는 두가지가 있다.

하나는 Remote해킹: 이것은 자신이 해킹하고자 하는 서버에 아이디를 가지고 있지 않을때, 아이디를 얻고자 시도하는 것을 말한다.

다른 하나는 Local 해킹: 해킹하고자 하는 서버에 일반계정을 가지고 있을때, 관리자 권한(root)을 얻고자 시도하는 것


Remote 해킹방법엔 여러가지 방법이 있다.

무작위로 아이디와 비밀번호를 입력하여 접속하는 방법에서 부터, 데몬의 취약점을 공략하는 방법

심지어 게시판이나 방명록을 이용하여 접속하는 방법까지 수십가지가 넘는다.


하지만 우리에게 중요한건 Local 해킹이다.

관리자 권한을 얻지 않는 한 해당 서버는 단지 그림의 떡이다.

그런데 관리자 권한은 왜 얻는가?

만약 FTZ에 guest 계정으로 로그인하여 관리자 권한을 하였다고 해보자.

그럼 그 순간 FTZ는 여러분의 것이 된다.

관리자 권한을 더은 여러분은 FTZ의 홈페이지도 마음대로 변경할 수도 있고

중요한 파일들도 다운로드하며 가져갈 수 있다.


SetUID

Set이란 말은 변경하다란 뜻을 가지고 있고, UID는 User ID의 약자이다.

SetUID는 ID를 변경한다 라고 해석이 된다.

SetUID는 일시적으로 자신의 ID를 변경하는 것을 말한다.


1. 구타는 FTZ에 로그인하려고 텔넷을 실행했다.

2. 주소를 입력하고, 아이디와 비밀번호를 입력했다.

3. 구타는 트레이닝에서 배운것을 떠올리며 아 나의 비밀번호도 쉐도우 파일로 쏘옥 들어가 있겠구나 라고 생각했다.

4. 앗 이럴수가 뒤를 쳐다보니 친구 히데루가 몰래 구타의 비밀번호를 훔쳐보고 있었다.

5. 구타는 히데루를 내쫓고, passwd 명령을 사용하여 자신의 패스워드를 바꾸어 버렸다.

6. 어라? 여기서 구타는 이상한 점을 발견했다. 나의 패스워드는 쉐도우 파일에 있다. 그런데 내가 지금

패스워드를 변경했으니, 쉐도우 파이르이 패스워드도 변경이 되었을 것이다. 하지만 파일은 오직 루트에게만

수정 권한이 있는데 어떻게 내가 그 내용을 변경한걸까?


이 문제의 답이 바로SetUID에 있다.

자신의 암호를 변경하는 passwd파일에 루트 권한의 SetUID가 걸려이어서, 일반 사용자들이 그 passwd파일을 실행하는 동안에는

루트로의 일시적인 아이디 변경이 되는 것이다.

결국 쉐도우 파일은 구타의 권한이 아닌 루트의 권한으로 변경이 된 셈이다.


1. SetUID는 파일에 걸리는 것이다.

2. SetUID가 걸린 파일을 실행하면 나의 아이디가 변경된다.

3. 파일의 실행이 끝나면 다시 원래의 아이디로 돌아온다.


리눅스나 유닉스에는 파일 passwd이외에도 SetUID가 걸린 파일이 수십개가 ㅗ딘다.

그럼 그 수십개의 파일이 폭ㅏㄴ을 손에 쥐고 있는 셈이 되어 버린다.


1. 나는 루틍다.

2. 나는 할일이 너무 많아서 passwd, sendmail, crontab 등등의 파일에게 나의 권한(SetUID)을 나누어주고

이것은 위험한 것이니 절대 남에게 넘겨주지 말라 라고 당부했다.

3. 구타가 로그인을 하였다. 구타는 sendmail의 SetUID를 보고 너무 멋있네요. 제가 한번만 구경해도 될까요? 라고 말했다.

4. sendmail은 루트의 경고를 무시하고 SetUID를 넘갸주었다.

5. 못된 구타는 sendmail의 아구리를 한방먹이고 SetUID를 들고 도망갔다.


지금까지의 과정이 일반적인 관리자 권한을 획득하는 방법이다.

실제 리눅스에 저렇게 멍청한 파일은 없다


딱 필요한 만큼만 관리자 권한을 제공하고, 그 일이 끝나면 다시 권한을 가져가 버린다.


해커들은 어떻게 하면 멍청한 파일들은 속여서 관리자 권한을 획득할까 라고 하루종이 고심한다.


지금까지 발견된 해킹기법인

레이스컨디션

IFS버그

링크버그

버퍼오버플로우

포맷 스트링 어택

등등이 바로 그것이다


이러한 버그에 의해 루트 권한을 넘겨준 파일은

useehelper, imwheel-solo, restore, screen 등 수 없이 많다.


해커스쿨 로그이 메뉴에 Local Exploit이란 것이 있는데 바로 그것이 지금까지 발견된 해킹기법을 모아 놓은 것이다.

그럼 그 많은 기법 중 예로 버퍼 오버플로우에 대해 알아보자.


joe라는 파일이 있다.

이 파일은 루트의 권한으로 SetUID가 걸려있다.

joe는 문서 편집을 할때 사용하는 파일로 joe filename이라고 입력하면 해당 파일의 편집화면이 출력된다.


그런데 이 joe 라는 파일은 약간 멍청하다.

왜냐하면 joe filename에 filename이 1000자가 넘어버리면 프로그램이 제대로 실행되지가 않는다.



해커들은 이것을 이용하여 joe에 대한 버퍼 오버플로우 기법을 개발하였다.

바로 1000자를 넣어 프로그램에 에러가 날 때의 그 순간을 이용하여 

/bin/bash 파일을 실행하도록 조작한다.

따라서 joe파일이 실행되는 동안에 루트의 아이디로 변경되고,

그 상태에서 /bin/bash를 실행하니

결과적으로 루트 권한의 쉘이 획득된다.



위의 과정은 수작업으로는 불가능하고 버퍼오버플로우 기법을 구현하려면 C언어를 할 줄 알아야만 한다.

프로그램에 에러가 나는 순간이나, 메모리의 장소등등을 손으로 직접 계산할 수는 없으니까.


따라서 많은 사람들이 해킹을 하려면 C언어를 배우라고 하는 것이다.


이처럼 SetUID가 걸려있는 파일들은 항상 해킹의 두려움속에 살고있다.


그럼 이 SetUID가 걸려있는지 아닌지는 어떻게 알아보나?



이제 서버 전체에서 SetUID가 걸린 파일을 찾는 방법

find / -perm -4000을 입력한다.


/에서부터 적어도 SetUID가 걸린 모든 파일을 찾아라 를 의미한다.

위에서 4000앞에 붙은 -가 '적어도'를 의미하며

-perm은 권한을 찾겠다라는 옵션이다.

그 뒤의 4자가 바로 SetUID을 의미하며, '000'은 rwx모두를 의미한다. 


옵션: -perm 권한과 일치하는 파일을 찾는다. ex) find / -perm 4755

       -name 이름과 일치하는 파일을 찾는다. ex) find / -name cat

       -user 유져와 일치하는 파일을 찾는다. ex) find / -user mmung2

  -group 그룹과 일치하는 파일을 찾는다. ex) find / -group guta


위의 옵션들은 서로 조합하여 동시에 사용할 수도 있다.

find / -user root -perm -4000 

루트의 권한으로 SetUID가 걸린 파일을 찾아라.


이제 해커스쿨의 레벨별 해킹을 통과하는 방법


1. 자신의 아이디가 level3이라고 해보자

2. level4로 넘어가기 위해서, level4의 권한으로 SetUID가 걸린 파일을 찾는다.

find / -user level4 -perm -4000

3. 그럼 한개 이상의 파일이 발견될 것이다.

4. 그 파일은 임의로 작성된 멍청한 파일이다.

5. 그 파일을 이용하여 level4의 쉘을 얻으면 성공

5. my-pass라고 입력하면 level4의 패스워드가.


level1


'시스템 해킹 > FTZ' 카테고리의 다른 글

level2  (0) 2016.09.09
level1  (0) 2016.09.08
trainer9  (0) 2016.09.05
trainer8  (0) 2016.09.05
trainer7  (0) 2016.09.02