Forensic/포렌식 공부

[침해 사고] 웹 서버(Apache2) 로그 분석

Ron Weasley 2022. 10. 12. 19:28

웹 서버 로그분석은 침해 사고에 있어 가장 빈번하게 일어난다. 그렇게 때문에 분석을 진행 해보았다.

웹 서버

웹 서버는 소프트웨어로 보면 웹 브라우저와 같은 클라이언트로부터 HTTP 요청을 받아 들이고, HTML 문서와 같은 웹 페이지를 반환하는 컴퓨터 프로그램이고, 하드웨어로 본다면 위에서 언급한 기능을 제공하는 컴퓨터 프로그램을 실행하는 컴퓨터이다.

 

웹 서버를 분석하는 이유

분석하는 이유는 다양하지만 웹 서비스를 운영하고 있는 서버 관리자라면 외부에서 어떤 요청이 들어오고 있는지, 그리고 어떤 사용자가 있는지에 대한 정보를 담고 있는 Access 로그에 관심을 가지는 것이 당연하다. 왜냐하면 사람도 마찬가지지만 본인의 물건에 누가 손을 대는 것 조차 싫어하시는 분들이 많은데 서버도 마찬가지이다. 외부에서 공격이 들어온다면 좀...기분이 좋지 않으니까 분석을 진행 하는것이다.

 

로그 분석에 있어 모든 내용을 적진 않겠지만, 실습 파일을 가지고 문제를 풀어가는 시나리오 형태로 공부를 해볼 예정이다.

 

주어진 압축 파일을 다운 받고 풀게되면 vmx의 가상 환경이랑 시나리오가 주어진다.

시나리오 : 해당 서버는 웹 서버로 사용되던 서버이다. 어느날부터인가 비정상 트래픽이 감지가 되었고, 서버 운영자의 얘기로는 바이러스에 감염되었거나 해커에게 공격 당한것 같다라고 한다. 해당 서버를 분석하여 이상 징후를 찾아 분석하여라.

(sudo 권한 가능)
계정 ID : tester
계정 PW : 1234

1. 공격자의 IP는 무엇인가?
2. 공격에 사용된 CVE 넘버는 무엇인가?
3. 공격에 취약한 파라미터(함수)는 무엇인가?
4. 해커가 침임 후 수정한 파일 목록은 무엇인가?
5. 서버에 설치된 악성코드의 이름은 무엇인가?
6. 악성코드가 하는 행위는 무엇인가?
7. 해커가 궁극적으로 웹 서버를 해킹한 목적은 무엇인가?

 

주어진 시나리오를 보면 위와 같이 적혀있다. 그렇기 때문에 하나씩 분석을 진행 하도록 하겠다.

WEB 폴더를 들어가게 되면 Usvr.vmx 파일이 존재하는데 더블 클릭하여 부팅을 시도한다.

부팅을 하게 되면 CLI 환경이 나올텐데, 나는 CLI 보다 GUI가 편한 관계로 GUI로 변환시켜서 재부팅해줬다.

GUI로 변환 방법
1) apt-get 도구 업데이트
$ sudo apt-get update

2) apt-get 도구 업그레이드
$ sudo apt-get upgrade

3) desktop 설치
$ sudo apt-get install ubuntu-desktop

* apt-get update를 하다가 이런 에러가 발생할 수 있다.
E: Could not get lock /var/lib/dpkg/lock-frontend - open (11: Resource temporarily unavailable)
E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), is another process using it?

이 경우 밑에 명령어를 입력하면 해결 된다.

$ sudo rm /var/lib/apt/lists/lock
$ sudo rm /var/cache/apt/archives/lock
$ sudo rm /var/lib/dpkg/lock*
$ sudo dpkg --configure -a

GUI가 설치 다 되었다면 다음과 같이 화면이 나올것이다.

분석을 진행하고 있는 우분투의 버전은 다음과 같다.

4.4.0-21-generic으로 보아 ubuntu16.04 버전임을 알 수 있다. 그리고 서버의 IP를 보도록 하겠다.

ipconfig 명령어를 사용하게 되면 address를 볼 수 있는데, URL을 입력을 해보면 사이트가 하나 나오게 된다.

여기까지 했으면 기본적으로 체크 해야 되는것은 끝났고...!  이제 문제를 풀어볼텐데, 1번을 보면 공격자의 IP를 찾아야한다.

웹 서버에서 공격자의 IP를 찾기 위해서는 웹 서버의 로그를 분석을 진행해야 하기 때문에 apache2 웹 서버가 로그를 남기는 경로인 /var/log/apache2/에 가서 Access.log를 vim으로 열어보겠다.

명령어는 다음과 같고 vim으로 열면 로그들을 볼 수 있다.

웹 로그들을 살펴보다보면  처음에는 분석하기 어려운 것들이 많지만 공격자의 IP가 담겨있는 로그를 하나 가져와서 하나씩 살펴보도록 하겠다.

① 192.168.127.131 - -
② [07/Jun/2016:04:54:37 + 9000]
③ "GET /wp/wp-content/plugins/wp-symposium-15.5.1/get_album_item.php?size=version() HTTP/1.1"
④ 200
⑤ 189
⑥ "-"
⑦ "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko)

 

가져온 로그는 이제 150번째 줄에 나와있는 공격자가 시도한 SQL Injection 공격에 대한 로그이다.

1. 원격 호스트 IP 주소(요청자)

2. 요청 시간

3. "GET" 메서드를 사용하고 "/wp/wp-content/plugins/wp~~/get_album_item.php 파일에 "HTTP/1.1"의 프로토콜로 요청

4. HTTP 상태 코드 (200)

5. HTTP 헤더를 제외한 전송 바이트 수 (189)

6. 요청을 처리하는 데 걸린 시간(ms)

7. 리퍼러(referrer)


이 로그를 보면, 공격을 요청하는 IP 주소를 구할 수 있다.

답 : 192.168.127.131

 

다음 문제를 보도록 하겠다.

이번 문제는 공격에 시도된 CVE의 번호를 찾는 문제인데, 이 역시 로그를 살펴보면 알 수 있다. 웹 로그 3번의 GET 메서를 보게되면 wp-symposiup-15.5.1이라는 경로가 보인다. 무슨 경로인지 궁금해서 검색을 진행해보았다.

검색을 해보니 해당 사이트가 나오게 되었고, 타이틀을 보면 SQL Injection이라고 적혀있음을 확인할 수 있다.

조금 더 내려보면 CVE 번호가 나오는 것을 확인할 수 있었다.

답 : CVE-2015-6522

 

다음 문제는 공격에 취약한 파라미터(함수)를 찾는 문제인데, 밑에 ExploitDB를 클릭하면 Exploit 코드를 볼 수 있다.

코드를 읽어보면 get_album_item.php 파일의 파라미터인 size가 SQL Injection을 유발하는 함수가 된다.

답 : size

 

다음 문제는 해커가 침입을 한 후 수정한 파일 목록을 찾는 문제이다.

수정한 파일 목록이라면 해커가 공격을 시도한 후 변경된 파일들을 찾는 문제인 것으로 생각이 들었으므로 /var/log/apache2/ 경로에 error.log를 분석을 진행하였다. error.log는 웹 서버의 진단정보와 요청을 처리하는 도중 발생한 오류를 기록하는 파일로써 서버가 시작하거나 동작하는데 문제가 있다면 무엇이 잘못되었는지 저장되는 파일이다.

 

error 로그에 남은 정보들을 분석을 진행 결과, 

42번째 로그부터 공격자 IP주소인 192.168.127.134로부터 접근이 있었고 에러가 발생한 것을 확인할 수 있었다.

에러가 끝난 시점은 약 40분 뒤인 5시 38분쯤 되보인다.

결국엔 이 시점에 일어난 일들 때문에 변경된 파일들을 찾아봐야 한다는 것이다.

특성 시점의 수정된 파일을 검색하기 위해서는 find -newer 옵션을 주고 사용하면 된다.

그 전에 A 시점부터 B 시점까지의 시간을 적어줘야 하기 때문에 다음과 같이 명령어를 입력하면 된다.

$ sudo touch -t 201606070454 start
$ sudo touch -t 201606070538 end

* -t 옵션은 시간을 옵션으로 주겠다는 의미입니다.

파일을 만들었으면 이 명령어를 실행합니다.
$ cd

밑에 명령어는 택일입니다.

$ sudo find / -newer /var/log/apache2/start -a ! -newer /var/log/apache2/end -print >> log.txt (전체 경로 기반)
$ sudo find /var/www/html/wp/ -newer /var/log/apache2/start -a ! -newer /var/log/apache2/end -print >> log.txt
(아파치가 정리 되는 경로에서만 출력)

$ cat log.txt

하나씩 보도록 하겠습니다.

start 파일과 end 파일이 생성된 것을 확인할 수 있습니다.

find 명령을 시도한 후 cat으로 출력을 한 결과입니다.

수정된 파일들이 출력이 됩니다.

 

다음 문제는 서버에 설치된 악성코드의 이름인데, 로그들을 살펴보면 wp-content.php와 연관되어 있음을 알 수 있다.

수정된 파일에서도 wp-content.php가 포함된다.

$ cd /var/www/html/wp/wp-content/
$ vim wp-content.php

위 명령어들을 입력하면 다음과 같은 vim창을 볼 수 있다.

ELF로 되어 있는 것으로 보아 리눅스 실행파일이네요...!

그렇기 때문에 악성코드의 이름은 wp-content.php입니다.

 

뭐...아까 처음에 봤던 size가 나와있는 get_album.php 코드도 한번 살펴보겠습니다.

경로 : cd /var/www/html/wp/wp-content/plugins/wp-symposium-15.5.1/

SQL Injection을 하는 코드가 나와있죠?? ㅋㅋㅋㅋㅋㅋㅋㅋ또 다른 파일인 index.php도 한번 볼까요?경로 :  cd /var/www/html/wp

해당 파일은 뭐...exec로 wp-content.php를 실행하라!!! 라고 적혀있네요 ㅋㅋㅋㅋㅋ

 

악성코드가 하는 행위를 살펴보기 위해서 netstat를 사용하겠습니다.

만약에 악성코드가 동작을 하고 있다면, netstat에서 잡힐 것이기 때문에 백그라운드로 php 파일을 실행시키고 보겠습니다.

$ cd /var/www/html/wp/wp-content$ ./wp-content.php & (백그라운드로 실행)$ netstat -anp

SYN 패킷을 해당 IP로 보내고 있는것으로 보아 좀비PC로써 서버가 사용이 되고 있음을 알 수 있습니다.

 

마지막으로 이제 해커가 이 서버를 궁금적으로 해킹을 한 목적을 보면 권한 탈취, 악성코드 베포 목적, 좀비PC입니다.

 

이렇게 웹 서버 로그를 분석을 진행했는데...재미로 봐주셨으면 좋겠습니다!!