메인 콘텐츠로 건너뛰기
블로그 안전 2022년 1월 23-30일 리노드 시큐리티 다이제스트

Linode Security Digest - 2022년 1월 23일~30일

리노드 시큐리티 다이제스트

이번 주, 우리는 Sysjoker라는 새로운 악성 코드 표본과 리눅스 메모리 법의학에 대한 가이드를 다룰 것입니다. 법의학 가이드는 포괄적이지 않고 확실히 자세히 설명하지는 않지만 변동성을 사용하여 메모리 추출 및 분석 프로세스의 기본 사항을 이해하는 데 도움이 될 수 있습니다.

시스조커 백도어

최근 에 의해 게시물 Intezer저자는 여러 운영 체제에서 실행할 수 있는 새로운 백도어를 분석했습니다. 분석에 따르면, "Sysjoker"macOS에서 실행할 수 있습니다., 리눅스, 그리고 윈도우. Sysjoker는 시스템 업데이트로 숨기고 C2(명령 및 제어) 서버의 IP 주소를 숨기고 변경하기 위해 다른 방법을 사용합니다.

또한 샘플이 VirusTotal 스캔에서 깨끗하다는 것과 관련이 있으며, 이는 백도어가 상당히 새로운 것임을 나타낼 수 있습니다. 시스템을 감염하는 데 사용하는 방법은 다양한 운영 체제에서 다르지만 시스템에서 지속성을 얻으면 C2 서버와 통신하기 시작합니다. 분석에서 Intezer는 아직 C2 서버에서 다음 단계 지침을 볼 수 없다고 말합니다. 이 게시물은 메모리 스캐너를 사용하여 맬웨어를 검색하는 것이 좋습니다.

포렌식 분석을 수행하는 또 다른 방법은 메모리를 덤프하고 변동성과 같은 잘 알려진 도구로 분석하는 것입니다. 리눅스 커널의 이전 버전에서 dd와같은 명령줄 도구를 사용하여 /dev/mem에서 가상 메모리를 복사하여 메모리를 덤프할 수 있습니다. 그러나 이 메서드는 잠재적인 보안 에 영향을 미치기 때문에 사용되지 않았습니다. 

리눅스 메모리 법의학

우리는 증거 수집, 증거 분석 및 보안 사고의 결과에 대한 문서화에 사용되는 다른 방법으로 법의학 분석을 요약 할 수 있습니다. 보안 위반이 확인된 후 일반적으로 손상된 시스템에서 어떤 일이 일어났는지 더 잘 이해하기 위한 포렌식 분석이 이루어집니다. 사건의 출처에 대해 방어적인 주장을 하기 위해 분석할 수 있는 수많은 증거 소스가 있습니다. 그러나 손상된 Linux 시스템의 실습 메모리 분석만 수행하여 사용할 수 있는 방법론 및 도구 중 일부를 시연할 수 있습니다.

기억

RAM은 본질적으로 휘발성입니다. 작동하려면 일정한 전원이 필요하며 시스템이 재부팅될 때마다 재설정됩니다. 리눅스는 /dev/mem 디렉토리 아래에 메모리에 저장된 데이터를 유지합니다. 그러나 최근 배포에서 직접 이 파티션을 사용하여 메모리에서 아티팩트를 추출하는 것은 불가능합니다. 이는 Linux 커널 4.16에서 시작하여 옵션(CONFIG_STRICT_DEVMEM)이기본적으로 이 중요한 파티션에 대한 액세스를 허용하지 않도록 활성화되기 때문입니다. 

이로 인해 메모리 이미지를 얻기가 더 어려워지지만 적(및 미숙한 사용자)이 시스템에 치명적인 손상을 입히기가 더 어려워집니다. 시스템에 루트 액세스 권한이 있는 공격자는 이 옵션을 사용하지 않는 경우 mem 장치를 사용하여 커널에 코드를 직접 삽입할 수 있습니다.

우리는 Debian 9 이 데모를 위한 데이터 센터 중 하나에 호스트 이름 "법의학"이 있는 리노드. 우리는 건물 및 분석 환경의 예로 법의학 상자를 구성했다. 외부 컴퓨터에서 이러한 작업을 수행할 필요는 없지만 증거를 보유한 컴퓨터를 조작하는 것은 바람직하지 않습니다. 다음은 분석의 단계입니다.

  1. 동일한 OS 및 커널 빌드/버전을 사용하는 컴퓨터를 사용하여 손상된 시스템에 대한 변동성 프로파일을 만듭니다.
  2. 선택한 도구(이 데모에서 AVML)로 메모리를 덤프합니다.
  3. 플러그인의 도움으로 변동성에 대해 만든 프로필을 사용하여 덤프된 메모리를 검사합니다.

경고

우리는 Python 2 변동성 3과현재 진행 중인 호환성 문제로 인해 데모 목적으로 변동성을 저장소합니다. 우리는 에 대한 지원을 알고 있습니다 Python 2년에 2020년에 끝났습니다. 이는 엄격하게 제어된 환경에서 도구의 사용을 입증하기 위한 것입니다. 가이드와 함께 팔로우하고 싶다면 자신의 위험에 처하십시오.

요구 사항

기본적으로 Debian 9 Linodes는 이 데모에서 사용할 도구 중 일부가 부족합니다. 다른 지침을 진행하기 전에 다음 명령으로 모든 명령을 설치하는 것이 좋습니다.

sudo apt install make git zip dwarfdump linux-headers-$(uname -r) python-pip python-distorm3 python-crypto

변동

변동성 프레임워크는 구현된 도구의 완전히 열린 컬렉션입니다. Python 휘발성 메모리(RAM) 샘플에서 디지털 아티팩트를 추출하기 위한 GNU 일반 공용 라이선스에 따라.

메모리 덤프를 분석할 때 올바른 변동성 프로파일이 사용되도록 하는 것이 중요합니다. 프로파일은 커널의 데이터 구조및 디버그 기호에 대한 정보가 포함된 파일로 메모리 이미지를 올바르게 구문 분석하는 데 사용할 수 있습니다. 다행히 변동성으로 프로필을 만드는 것은 매우 간단합니다. 일부 미리 빌드된 프로필에 대한 변동성 프로필 저장소를 확인할 수도 있습니다.

프로필 작성

필요한 도구를 설치한 후 실행 중인 컴퓨터에 대한 변동성 프로필을 작성할 수 있습니다.

1. git clone https://github.com/volatilityfoundation/volatility ~/volatility
2. cd ~/volatility/tools/linux/
3. make
4. zip ~/$(lsb_release -i -s)_$(uname -r).zip ./module.dwarf /boot/System.map-$(uname -r)
5. cp ~/$(lsb_release -i -s)_$(uname -r).zip ~/volatility/volatility/plugins/overlays/linux/
6. python ~/volatility/vol.py --info

초기 줄(1)은 변동성 리포지토리를 사용자의 홈 디렉터리로 복제합니다. (2) ~/휘발성/도구/리눅스 디렉토리에 들어가면 커널 모듈을 다시 컴파일하기 위해 (3)을 사용할 수 있습니다. 커널 헤더를 미리 다운로드하는 것이 중요하며 그렇지 않으면 이 프로세스가 실패할 수 있습니다. 

이로 인해 모듈.난쟁이가발생합니다. 그런 다음 다음 명령(4)은 이 모듈을 사용하여 /boot에서 시스템 맵을 읽고 변동성에서 사용해야 하는 프로파일을 생성합니다. 그런 다음 이 프로필(5)을 올바른 디렉터리로 복사하여 변동성이 사용할 수 있도록 할 수 있습니다. 마지막으로, 우리의 프로필이 변동성에 적절하게 로드되었는지 확인하기 위해 정보 플래그(6)로 변동성을 한 번 실행할 수 있습니다. 모든 단계가 성공하면 출력의 프로필 섹션에서 사용자 지정 프로필이 표시됩니다.

숨겨진 커널 모듈 설치

이 예제에서는 HiddenWall을 사용하여 숨겨진 리눅스 커널 모듈(LKM)을 생성하고 'cantfindme'라는 이름으로 다른 모듈에 로드했습니다. Debian 9 '포렌식' 기계와 동일한 커널 빌드/버전을 갖춘 리노드. 모듈이 로드되지만 시스템에서 lsmod 또는 modprobe를 실행할 때 는 볼 수 없습니다. 

1
확대하려면 이미지를 클릭합니다.

메모리 수집

리눅스에서 메모리를 덤프 하는 데 사용할 수 있는 좋은 도구; 그러나 이 가이드에서는 LiME가 웹에서 자주 다루어지므로 AVML(Linux용 휘발성 메모리 획득)로 이동합니다. AVML은 마이크로 소프트에 의해 만들어진 리눅스에 대한 오픈 소스 메모리 획득 도구입니다. 여기에서 최신 릴리스를 찾아 메모리를 덤프하려는 컴퓨터에 바이너리를 다운로드할 수 있습니다. 메모리를 덤프하는 컴퓨터에는 이전에 생성한 변동성 프로필과 동일한 커널/OS 빌드 및 버전이 있어야 합니다.

실제 시나리오에서는 우리가 수집하는 증거가 법정에서 허용 될 수 있도록 손상된 시스템을 조작하지 않는 것이 중요합니다. 비트별 수집은 압축된 이미지가 아닐 수 있는 데이터를 제공할 수 있으므로 가능한 한 이미지를 압축하지 않는 것도 중요합니다.

홈 디렉터리에 AVML 바이너리를 다운로드한 후 다음 명령을 사용하여 시스템의 메모리를 홈 디렉터리에 덤프할 수 있습니다.

sudo ~/avml ~/output.lime

AVML은 리메 형식으로 메모리를 덤프하여 만든 변동성 프로필로 분석을 시작할 수 있습니다. 덤프 크기를 확인하여 장치의 총 RAM과 일치하는지 확인할 수도 있습니다. 변동성은 메모리 덤프를 조작해서는 안되지만 파일의 복사본을 만들고 해시가 일치하는지 확인 한 후 원본 대신 복사 된 데이터를 분석하는 것이 좋습니다.

'pwnd' 상자의 메모리를 덤프한 후 분석을 위해 '법의학' 상자에 전송했습니다.

변동성 플러그인

변동성은 법의학 분석가를 돕기 위해 수많은 플러그인을 제공합니다. Github 페이지에서이러한 플러그인 목록을 찾을 수 있습니다. 변동성 플러그인을 사용 하 여 메모리 이미지의 빠른 개요를 얻을 수 있습니다. 메모리 이미지를 분석하기 위한 명령 형식은 아래에서 찾을 수 있습니다.

python ~/volatility/vol.py -f <path_to_memory_dump> --profile=<profile>
<plugin_name> <plugin_options>

다음은 메모리 이미지에서 숨겨진 로드 커널 모듈을 나열하는 플러그인 linux_hidden_modules 출력입니다.

1
확대하려면 이미지를 클릭합니다.

이 플러그인은 악의적 일 수 있습니다 숨겨진 리눅스 커널 모듈을 찾을 수 있습니다. 시스템에서 lsmod를 실행할 때 이러한 모듈을 볼 수 없는 경우에도 메모리 덤프에서 모두 감지하고 추출할 수 있습니다. linux_moddump 플러그인을 사용하여 regex 패턴에 이름을 지정하거나 메모리 이미지에 모듈의 기본 주소를 지정하여 커널 모듈을 덤프할 수 있습니다.

1
확대하려면 이미지를 클릭합니다.

이 게시물에는 다룰 수 없는 변동성으로 할 수 있는 일이 더 많습니다. 당신의 생각과 제안을 공유하기 위해 아래에 코멘트를 남겨 주시기 바랍니다.


코멘트

댓글 남기기

이메일 주소는 게시되지 않습니다.