
Redhat9 기반의 침해 PC를 vmware에서 실습했다.
네트워크 설정에서 vmnet8의 subnetIP를 10.10.10.0 대역대로 맞추고,
DHCP 범위를 5에서 254까지 맞췄다.
그러고 RedHat 을 실행시키면 10.10.10.15로 실행된다.
이제 Putty로 10.10.10.15로 open.
설정한 아이디와 패스워드 입력 후 접속 완료.
이게 해킹당한 웹서버다.
해킹당한 웹서버를 분석할 때는 제일 중요한 것이 휘발성 데이터다.
재부팅했을 때 사라지는 휘발성 데이터는 실시간으로 누적되지 않고 계속 변동이 발생한다. 대표적으로 네트워크 트래픽, 프로세스, 메모리, 접속 데이터 등이다. 이제 분석을 시작해 보자.
휘발성 데이터 수집
- 네트워크 분석
공격자가 명령어를 변조하거나 위장했을 수도 있기 때문에 그런 프로그램이나 명령어가 출력해 준 값은 절대로 신뢰해서는 안된다.
순서대로 네트워크 상태정보, 프로세스정보, 소켓데이터 상태정보를 뽑았다.
1. 네트워크 상태 정보 추출
2. 프로세스 정보 추출
3. 소켓데이터 정보 추출
네트워크 상태정보에서 80,21,22,25 외에 1번 포트가 열려있는 걸 확인했었다.
1번 포트에 보면 raw라는 프로토콜 명으로 정상적이지 않는 것이 있다. 프로그램 이름은 ttymon이고, PID는 2258이다.
하지만 ps.txt를 확인해 보면 저기에 2558번 PID가 없다.
ps명령어가 변조가 됐거나, 2258번 프로세스가 숨긴 프로세스인지. 둘 중에 하나 거나 둘 다이거나 하는 상황이다.
proc 경로는 프로세스를 관리하는 곳이다. 여기에 보면 2558번 프로세스가 보인다.
여기 보면 이상한 명령어 파일이 있다.
써보면 왼쪽에 ttymon이 보인다.
/sbin 파일로 들어가 보자. cd /sbin
여기서 ll로
확인해 보면 이상하게 user 권한에 수상한 122 같은 게 있다.
최상위 경로에서부터 user가 122인 것들만 찾아냈는데, 이것들이 수상한 파일들이고, 변조되었을 가능성이 크다.
이제 이 파일들이 언제 생성됐는지 확인해 보자.
각 파일의 상태 기록들을 확인해 봤다.
첫 번째 파일을 봐보면, Uid 122이고, 접근, 수정일자, 사이즈 등을 확인할 수 있다.
ttymon을 보면 2011년 4월에 수정됐고, 9월에 마지막 실행이 됐었다.
특정 포트를 사용하는 프로세스를 보는 lsof로 확인해 보면 정상적이지 않은 '3'이라는 프로세스로 31337 포트가 열려있다.
근데 네트워크 상태에 보면 31337 포트도 안 보이고, 2256 PID도 안 보인다. 이건 분명 숨겨져 있는 것이다.
그래서 proc에서 2256번으로 들어가 보자.
exe는 삭제 됐다고 뜬다.
cmdline을 확인해 보면 ttyload로 실행되는 것을 알 수 있다. ttyload의 정보를 확인해 봤다.
그럼 도대체 31337 포트로 어떤 프로토콜을 사용하는 것인지 알 수는 없을까?
그럴 땐 telnet을 써보자.
이렇게 쳐보면 31337 포트는 ssh프로토콜을 사용한다.
ssh로 접속해 보면 잘 된다.
즉, 31337 포트는 ssh프로토콜을 활용한 백도어로 확인된다.
패스워드 파일을 보면 fuckroot 계정이 0,0으로 설정되어 있는데, 이건 공격자가 임의적으로 계정을 추가했다고 볼 수 있다.
즉, 이때부터 공격자가 시스템을 완전히 장악을 했다고 볼 수 있다.
패스워드 파일 봐보면,
/bin/bash라고 끝나는 계정들은 베쉬쉘로 실행이 될 수 있는 것들이다. 이것들만 다시 확인해 봤다.
$grep fuckroot secure*
crontab에는 매년 매월 5시간 30분마다 /etc/passwd를 /etc/passwdl로 덮어 씌어라. (cp)
매년 매월 매시 45초마다 10.10.10.12 31337로 접속하라.
등의 실행파트가 있다.
.lock 확장자는 백업파일이지만 뒤에 l이 붙어있는 것은 원래 없는 파일이다.
passwdl은 28일 22:28시에 shadowl은 22:29에 업로드 됐다.
이걸 지워버리더라도, crontab에 의해서 특정 시간에 자동으로 생성될 것이다.
지금까지 공격자는 루트권한도 따고, crontab도 만들었다.
루트 권한을 따려면 명령어 쉘 권한을 얻어야 하는데 공격자는 어떻게 최초 접근을 했을까?
이제부터 본 분석을 해야 한다. 그러면 웹로그를 분석해야 한다.
비휘발 성데이터 수집
ps -ef를 하면 httpd로 열려있다. 2551~ 포트부터 열려있는 것을 확인할 수 있다.
저 경로로 아파치 웹서버 로그가 저장되는 것을 알 수 있다.
거기로 가서 POST메서드를 검색해 봤다.
근데 같은 파일이 들어오는데 파일사이즈가 불규칙적이다. 이것이 의심스럽다.
아파치 웹서버 루트 디렉터리 들어왔다.
여기서 저 파일이 있던 경로로 들어가서 상태를 확인해 보자.
이 파일이 admin으로 되어있다. 이것은 웹사이트로 만든 파일이 아니다.
파일을 들여다보면 웹쉘로 작성된 것을 알 수 있다.
로컬에서 이 경로로 들어가 보면 브라우저 내에서 바로 쉘을 사용할 수 있는 환경이 있다.
그렇다면 공격자는 이 파일을 어떻게 올렸을까??
이게 웹사이트로 올렸다면, admin이 아니라 nobody라고 떴을 것이다.
다시 한번 포트를 확인해 보면.
22번으로 접속 이미 가능한데 굳이 웹쉘 올리진 않았을 거고.
21번 포트 ftp서비스로 파일을 올렸을 수도 있다.
xferlog가 ftp로그이다.
맞다. 첫 번째 보면 지금까지 봤던 파일이 업로드된 것을 볼 수 있다.
즉, 공격자는 ftp서비스로 member_conrim.php라는 웹쉘을 2011년 4월 28일에 업로드했던 걸로 알 수 있다.
이것은 ftp서버의 계정을 키로그라던가 어딘가로부터 탈취한 admin계정으로 이 웹쉘을 업로드한 것.
그럼 ftp로 업로드 한 뒤 루트권한은 어떻게 했나?
윈도우라면 웹서비스 계정에서 administrator로 권한상승이 되면 다 기록이 되지만, 리눅스는 그런 것이 없다.
그래서 포렌식이나 침해사고 엔지니어링입장에서 리눅스는 분석하기 힘들다.
여기서 리눅스를 분석을 아예 못하는 것은 아니다. 분석 노하우가 있다.
웹쉘이 생성된 시간이 2011년 4월 27일 21시 23분 09 초고,
공격자가 fuckroot라는 계정을 추가한 시간 사이에 루트권한을 땄을 것이다.
그럼 웹쉘이 만들어진 시간에 동일한 시간에 만들어진 파일 하나와, fuckroot이라는 계정이 만들어진 시간에 동일하게 만들어진 파일 하나 사이에 그 시간 동안 모든 파일들을 분석해봐야 한다.
웹 쉘이 만들어진 시간 : Thu Apr 28 21:23:09 2011
fuckroot 생성 시간 : Apr 28 22:14:28
시작과 끝 시간을 기록하기 위한 파일을 만든다.
find / -newer beghin -a ! -newer end -ls
여기 보면 경로가...으로 수상하다.
이렇게... 명으로 된 폴더는 uid가 30이라는 수상한 것으로 설정되어 있다.
이후 여기 안의 폴더를 분석해 보자.
로그에서 POST메서드로 찍혔던 파일 용량과 비슷하다.
시간도 보면 비슷한 것을 알 수 있다.
파일을 보면 리눅스 바이너리 파일이다.
확인해보면 .exp1은 root로 권한상승 시켜주는 쉘이다. 공격자는 이걸 사용해서 루트 권한을 탈취한 것 같다.
정상적인 static binary command인 lsof ps netstat들을 갖고 와서 사용하게 된다면 3317 포트, ttymon프로세스가 보일 것이다. 공격자가 이 명령어들을 다 변조했기 때문에 새로 가져와야 한다.
다음 게시물에 침투 시나리오에 대한 정리를 했다.
'침해사고분석' 카테고리의 다른 글
악성 프로세스 행위 분석 (2) | 2023.11.26 |
---|---|
MFT 파일시스템 분석 (0) | 2023.11.26 |
침해사고분석 - 0x4 CTF 예제를 통한 이상징후 분석하기 (4) | 2023.11.24 |
침해사고분석 - 0x3 피해시스템 분석 최종정리 (4) | 2023.11.24 |
침해사고분석 - 0x1 공격로그 찾기 (2) | 2023.11.24 |
IT/보안