nightHawk Response

엘라스틱서치 백엔드에 동시에 존재하지 않는 포렌식 데이터를 시각화하기 위해 응용프로그램을 만들었다.

이 응용프로그램은 맨디언트 레드라인(Mandiant Redline)의 "collections" 파일을 흡수할 수 있도록 설계되어 검색/스택과 태그의 유연성을 제공한다.

응용프로그램은 하나의 창에서 여러 개의 조사 결과(또는 수백 개의 엔드포인트)를 제어할 수 없다는 것을 보고 만들었다.

레드라인 감사를 흡수하기 위해, nightHawk.GO를 만들었고, 이 프레임워크와 함께 사용하도록 Gopher 응용프로그램을 디자인했다. 응용프로그램에 대한 소스 코드는 이 저장소에서 사용할 수 있고, 바이너리는 컴파일되었으며, 부팅만으로 도구를 사용할 수 있도록 ISO를 준비해두었다.

Build

16/07/16 : Version 1.0.2

  1. Bug 수정 (토큰화와 매핑 업데이트)
  2. 글로벌 검색 에러 처리, 키워드 강조
  3. URL 도메인, DNS 스태킹(Stacking), 스태킹 레지스트리 수정
  4. 데이터 색인 재생성 유틸리티 추가 (사용 방법은 wiki article를 참조)
  5. 새 버전의 ISO를 다운로드하지 않고 yum으로 소스코드 업데이트할 수 있도록 기능을 추가 (사용 방법은 wiki article를 참조)
  6. 하루가 지나면 /opt/nighthawk/var/media 폴더의 오래된 수집 파일을 삭제 (또는 폴더 크기가 2GB 이상일 때)
  7. w32system 추가 (시스템 정보)
  8. hostname을 위해 postController에 정적 매핑을 삭제함
  9. default_field가 엘라스틱서치에 전달되지 않는 전체적인 감사 문제를 해결

기능:

비디오 데모: nightHawk Response Platform

  • 단일 보기 형식의 엔드포인트 포렌식(Single view endpoint forensics) (다수 감사 유형)
  • 글로벌 검색
  • 타임라인 생성
  • 스태킹
  • 태깅
  • 대화형 프로세스 트리 뷰
  • 여러 파일 업로드 & 지명 형식의 조사


nightHawk ISO

nightHawk를 사용자들이 쉽게 사용할 수 있게 모든 설정을 포함한 ISO를 만들어 준비했다.

  1. 최신 nightHawk 소스
  2. CentOS 7 Minamal에 nightHawk 운영에 필요한 핵심 라이브러리를 포함
  3. 리버스 프록시에서 Nginx와 UWSGI를 설치(이미 구성되고 최적화됨), SSL 활성화됨
  4. 최신 엘라스틱서치/키바나 (원하는 경우 키바나는 웹 서비스 열람 가능)
  5. 모든 핵심 서비스를 위한 Sysctrl
  6. 모든 핵심 서비스를 위한 (rotated) 로그
  7. 시스템 설정 구성의 모든 리스트는 `/opt/nighthawk/etc/nightHawk.json' 파일에서 찾을 수 있음

시스템 구성:

제공된 ISO를 이용하여 VM을 구축할 때 다음 사항들을 고려한다.

1. CPU/RAM

pending: 노드 당 할당된 시스템 메모리의 1/4이 듀얼 노드로 엘라스틱 서비스로 설정한다. 이것이 의미하는 것은 2기가 램이면, 각각 ES 노드가 512메가가 되고, 시스템은 1기가로 유지된다.

기타 다른 방법으로 설정하기를 원한다면, SSH로 접속하는 방식으로 구성할 수 있다.

2. HDD

최소 20기가 고려해야 한다. 감사 파일이 클 수 있기에 많은 컬렉션을 흡수하고 처리하기 위해 저장소는 많이 할당하는 것이 좋다.

pending: 대규모 크기의 인스턴스를 위해 사용자 기반 저장소를 설정한다.  별도의 파티션을 원하는 경우, 몇 가지 변경을 통해 새 파티션으로 ES 데이터 저장소를 가리키도록 직접 작업할 수 있다.

설치:

  • ISO 다운로드: nightHawk v1.0.2
  • 하드웨어 구성하고 ISO를 VM에 마운드 하면 설치 스크립트가 시작
  • 한 번에 완료되고, 브라우저 (크롬/파이어폭스)로 https://192.168.42.173에 접속
  • 키바나에 접속하고 싶다면 https://192.168.42.173:8443에 접속
  • SSH로 접속하고 싶다면 로그인은 admin/nightHawk를 사용
  • 아이피를 변경하고 싶다면 (응용프로그램 전체에 반영) /opt/nighthawk/bin/nighthawkctl set-ip <new_ipaddress>를 이용
  • 깃허브 저장소의 루트 경로에 있는 레드라인 감사 수집 스크립트(MemoryzeAuditScript.xml)를 사용하여 nightHawk를 채울 수 있는 기록을 생성할 수 있음

업로드:

업로드를 위한 감사 zip 파일 생성 (레드라인 독립형 수집기):

step_1: Sessions\AnalysisSessionX\Audits\<ComputerName> 로 이동하는데, X는 대부분 1 임

step_2: 예로 20160708085733 감사 파일을 포함하는 폴더를 zip 파일로 생성

step_3: 20160708085733.zip 파일을 업로드

중요: 기존 HX 감사 파일 사용 (HX 수집기): 파이어아이 HX 감사는 마지막에 .mans로 끝나는 확장자다. .mans 파일이 실제 zip 파일이기에 HX 감사는 레드라인 수집기와 다르다. 다시 말해서 위에서 언급한 레드라인 감사 파일을 압축하여 업로드하는 것과 달리 .mans 파일을 직접 업로드할 수 있음을 의미한다.

내비게이션 바에서 "Upload" 아이콘을 선택하여 감사 .zip (또는 여러 개) 파일을 선택하고, 사건 이름(입력하지 않으면 시스템이 자동 생성) 입력하여 제출한다. 레드라인 감사 스크립트를 이용하여 수집하였다면, 위에서 언급한 "레드라인 수집기" 지침에 따라 수행한다.

한번 처리되면, 엔드포인트는 "Current Investigation" 트리 노드에 표시될 것이다. 엔드포인트에서 해당 엔드포인트에 사용할 수 있는 모든 감사 유형이 표시된다. 웹 응용프로그램의 업로드 기능은 엘라스틱서치에 밀어 넣는 데이터와 레드라인 감사를 분석하는 것을 GO 응용프로그램이 popen 서브 프로세스를 호출하여 생성한다. 업로드를 위한 두 개 옵션이 있는데 하나는 순차적이고 다른 하나는 동시에 진행한다.

참고: 동시에 업로드하는 것은 자원을 많이 소비하기에 한 번에 5개로 제한하는데, 스펙이 낮은 컴퓨터인 경우 2-3개로 제한할 수 있다.

태깅:

데이터에 태그하기 위해서 (응답 보기에서) 모든 테이블에 모든 행을 클릭할 수 있다. 한번 태그되면 코멘트 보기에서 코멘트를 볼 수 있다.

엘라스틱서치:

사용자 정의 매핑(git 루트에서 제공)과 그에 따른 의견은 다음에서 볼 수 있다.

1. 상위/하위 관계:

기록은 상위/하위 관계를 GO 언어로 작성된 앱을 통해 인덱싱 된다. 이렇게 선택한 이유는 기록한 것을 잘 볼 수 있도록 상대적 논리 경로를 제공할 수 있기 때문이다. 즉, 상위는 엔드포인트 이름이고 하위는 감사 유형이다. 상위/하위 관계 기록을 추려내는 것은 규모를 볼 수 있어 이해하기 좋다. 특정 감사 유형에 대한 모든 하위 기록을 추려내기 위해 배열에 상위 데이터를 구축하는 것이 필요하다. 이때 스태킹 프레임워크가 사용된다.

2. 조각내기:

엘라스틱서치 설치는 튜닝 및 적절한 설계를 요구한다. 조각내기<sup>sharding</sup>는 상위/하위 기록을 연결하고 있기 때문에 이해하는 것이 중요하다. 하위는 항상 상위에 전달되며, 그 자체로는 존재할 수 없다. 이것이 의미하는 것은 인덱스가 얼마나 많은 조각들에 의미를 부여하는 가다. 우리가 이해할 것은 단편 조각들과 함께 많은 노드를 encorporated로 선택하여 설치하는 것이 현명할 수 있다는 것이다. 이러한 설치에서 성능을 개선하기 위해서는 조각의 경로를 검색하는 방법이다.

우리는 빠른 검색을 위한 취적의 구성을 설계하려고 노력한다.

3. 규모:

nightHawk 응용프로그램은 확장할 수 있도록 설계되었다. 초기 디자인 주제에서, 우리는 약 4백만 개 이상 기록(또는 50대의 엔드포인트를 소화)을 3 ES 노드(맥북 프로)를 포함하는 단일 CPU 2gb 우분투 VM으로 무리 없이 동작시켰다. 응용프로그램을 64/128기가 램과 SAS 저장소를 설치하여 운영하는 것이 응용프로그램이 한꺼번에 분석하여 빠르 응답 시간을 유지할 수 있다.

고려 사항:

1. 혼합 처리한 DataTables:

테이블에 있는 모든 기록을 표현하기에는 덩치가 큰 여러 가지 감사 유형을 소화해야 한다. 예를 들면, URL 사용 내역과 레지스트리는 15k 크기의 DOM 문서를 반환하는데 이 문서를 렌더링하는 사용자의 브라우저는 부담을 느낄 것이다. 이러한 부담을 방지하기 위해 감사 유형을 포함하는 결과 페이지는 서버에서 처리하도록 구성했다. 다시 말해서 백엔드에 엘라스틱서치를 사용하여 기록에서 감사 유형을 검색할 수 있음을 의미한다.

2. 태깅:

현재 기록을 태그하고 그 의견을 볼 수 있다. 이 태그는 업데이트하거나 변경할 수 있다. 분석가는 기록에 날짜/분석 이름/설명과 같은 것을 제공할 수 있다.

종속적인 응용프로그램 (사전에 모두 설치):

elasticsearch-dsl.py

django 1.8

python requests

앞으로 해야할 것:

  • 프로세스 처리 (진행 중)
  • 시간 기반 생성기를 위한 시간 선택 슬라이더 (진행 중)
  • 현재/이전 조사를 위한 콘텍스트 메뉴
  • 태그 콘텍스트. 태그 시스템은 분석 창에서 실시간 설명을 위해 웹소켓 루프로 통합할 예정(진행 중)
  • 응용프로그램 콘텍스트
  • 서로 다른 콘텍스트 사이를 넘나드는 능력
  • 잠재적으로 조사한 날자를 운용하기 위한 노드 트리를 재설계
  • 선택적 스태킹, 현재 루트 노드를 선택하는 것은 가능
  • 조각 경로를 검색
  • 레드라인 감사 스크립트 템플릿
  • AngularJS와 광범위한 통합 (진행 중)
  • 반응형 디자인 (진행 중)
  • 핵심 설정의 구성을 위한 관리 제어 페이지 (진행 중)

제작자 & 참고:

우리는 항상 프로젝트에 기여하길 원하는 분들을 찾고 있다. 당신이 원하는 무언가를 요청하길 바라고 그것이 좋은 아이디어인 경우에 병합할 생각은 있지만 웹 디자인은 의미가 없다.

Daniel Eden & Roshan Maskey

Credits:

Mandiant Redline devs, AngularJS, Django devs, Angular-DataTables/DataTables, D3(Bostock), Elasticsearch/ES-dsl.py, jsTree, qTip, GOlang, Python, Fahad Abdulaal(Logo/Video).


스크린샷


설치

가상머신 설정, ISO 마운트 그리고 설치

가상머신을 설정할 때 CentOS 64비트로 구성한다.

번역한 내용을 살펴보면 64기가 메모리 등 높은 사양을 요구하기에 사용자가 줄 수 있는 최대의 사양을 부여한다.

1. CPU/RAM/HDD

  • Number of processors: 2
  • Number of cores per processor: 4
  • Memory: 4GB
  • 50GB

구성이 완료되었다면 다운로드받은 nightHawkResponse.iso 파일을 마운트한다.

이제 가상머신을 실행하면 설치할 수 있는 항목을 볼 수 있다.

Install nightHawk Response v1.0.2를 선택하면 바로 설치가 진행된다.

설치가 완료되면 다음과 같이 로그인 할 수 있는 화면으로 전환된다. 아이디와 비밀번호는 admin/nightHawk 다.

아이피, DNS 설정, 패키지 업데이트

아이피가 고정으로 192.168.42.173이 설정되어 있다. 아이피 설정을 바꾸기위해 로그인 한다. 설정을 바꾸기 위해 다음과 같이 명령을 이용한다. nightHawk는 CentOS 7 minimal 버전을 사용하고 있기에 SELinux가 적용되어 enforce mode로 동작한다. 따라서 sudo 명령을 함께 사용한다.

sudo /opt/nighthawk/bin/nighthawkctl set-ip 192.168.0.128

nightHawk는 yum으로 업데이트가 가능하다. 따라서 DNS를 설정하여 최신버전의 nightHawk가 존재하는지 확인한다. DNS 설정을 위해 nmtui 명령으로 DNS를 설정한다.

nmtui

설정이 완료되었다면, 네트워크 서비스를 재시작한다.

sudo service network restart

www.google.com 도메인으로 핑 테스트하여 원활하게 통신하는지 확인한다.

새로운 패키지 정보를 갱신한다.

sudo yum check-update

nightHawk 패키지를 업데이트한다. 최신버전이면 추가 설치가 없이 종료된다. 먼저 nightHawk와 관련된 패키지들을 살펴보자.

yum list installed | grep nighthawk*
nighthawk.x86_64                   0.1-1.el7.nhr                       @anaconda
nighthawk-elastic.x86_64           0.1-1.el7.nhr                       @anaconda
nighthawk-kibana.x86_64            0.1-1.el7.nhr                       @anaconda
nighthawk-release.x86_64           0.1-1.el7.nhr                       @anaconda
업데이트를 통해 추가 설치할 요소가 있는지 살펴본다.

sudo yum update nighthawk*
[sudo] password for admin:
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirror.navercorp.com
 * epel: mirror.premi.st
 * extras: mirror.navercorp.com
 * updates: mirror.navercorp.com
No packages marked for update

모든 준비가 끝났다면, 브라우저를 이용하여 할당한 아이피로 접근하여 nightHawk를 사용할 수 있다.

테스트

nightHawk가 정보를 가공하는 것을 보려면, 정보가 필요하다. 이 정보는 앞서 번역한 내용처럼 레드라인을 이용하거나 HX 콜렉터를 이용할 수 있다. 하지만 이러한 도구를 이용하기 전에 간단하게 테스트할 수 있도록 깃허브의 nighthawk_utils 폴더에는 샘플로 20160707054834.zip 파일을 제공한다. 이 파일을 다운로드 받고 웹으로 업로드하여 분석 결과를 확인해보자.

업로드는 .zip 파일을 압축 해제하지 않고 업로드한다.

파일은 /opt/nighthawk/var/media에 업로드된다.

pwd
/opt/nighthawk/var/media
ls -al
total 12692
drwxr-xr-x. 2 nighthawk nighthawk     4096 Jul 21 07:24 .
drwxr-xr-x. 9 nighthawk nighthawk     4096 Jul 21  2016 ..
-rw-rw-rw-. 1 nighthawk nighthawk 12987319 Jul 21 07:24 20160707054834.zip

nightHawk가 분석을 완료하면 다음과 같이 볼 수 있다.


사용 후기

  • 처리 속도가 엄청 느림
    • 가상머신 스펙 때문인듯
  • 브라우저 렌더링 속도도 엄청 느림
    • 레드라인으로 직접 수집한 데이터를 파싱시켰을 때 분석 및 열람이 거의 불가능
  • 그래도 샘플을 이용했을 땐 좀 볼 수 있음
    • Response 기능과 Global Search만
    • Timeline 기능은 애매하게 동작
    • Stacking 기능이 가장 중요한 것 같지만 오래걸림
  • 감사 수집 스크립트(MemoryzeAuditScript.xml)를 깃허브에서 제공하는데 어떻게 사용할지 고민
  • 편리하게 사용할 수 있도록 iso를 제공하지만, 깃허브의 소스코드는 어떻게 컴파일하고 운영할지에 대한 내용이 없음
  • 요구 스펙이 큰걸 보았을때 개인적으로 사용하거나 운용하기 힘들어 보임


참조 사이트


본 문서는 (주)한국정보보호교육센터 f-NGS 연구소에서 의역하고 작성한 내용입니다.
Written and Translated by Hakawati in KISEC 40th

+ Recent posts