KOROMOON

착한 사마리아인이 되고 싶습니다.

11/19/2021

악성 리눅스 쉘 스크립트가 사용하는 회피 기법 (Evasive Techniques Used By Malicious Linux Shell Scripts)


Uptycs 사의 블로그 글을 연구 차원에서 필요한 부분 번역함.

출처 : 

https://www.uptycs.com/blog/evasive-techniques-used-by-malicious-linux-shell-scripts




악성 쉘 스크립트에서 주로 사용되는 일반적인 방어 회피 기술에 대해 설명함.


공격자는 악성 쉘 스크립트를 초기 벡터로 사용하여 피해자 시스템에 악성 페이로드를 다운로드함.

초기에는 Base64 및 기타 일반적인 인코딩 체계를 사용하여 방어 매개변수를 회피함.

그러나 현재 공격자는 방화벽을 비활성화하는 명령, 특정 에이전트 모니터링 등을 포함하는 새로운 기술을 채택하고 있음.


악성 쉘 스크립트에서 식별한 일반적인 회피 기술은 다음과 같음.


1. 모니터링 에이전트 제거

2. 방화벽 및 인터럽트 비활성화

3. 리눅스 보안 모듈(LSM) 비활성화

4. ACL 수정

5. 속성 변경

6. 일반 유틸리티 이름 변경


특정 악성코드를 사용하여 이러한 기술에 대해 설명함.

(해시값 : 39ac019520a278e350065d12ebc0c24201584390724f3d8e0dc828664fee6cae)




( 1 ) 모니터링 에이전트 제거


모니터링 에이전트는 프로세스 및 네트워크와 관련된 시스템에서 진해오디는 활동을 정기적으로 모니터링하는 소프트웨어임.

모니터링 에이전트는 사고 조사 중에 도움이 되는 다양한 로그도 생성함.


샌드박스에서 발견한 악성 스크립트는 다음과 같이 시도함.

- 클라우드 관련 모니터링 에이전트 Aegis(Alibaba 클라우드 위협 탐지 에이전트)를 제거하고 aliyun 서비스를 중지함.

- Tencent 의 호스트 보안 에이전트인 YunJing 을 제거함.


위험 완화를 위해 일반적으로 엔드포인트에 설치되는 BCM 클라이언트 관리 에이전트를 제거함.


< 모니터링 에이전트 제거 스크립트 >




( 2 ) 방화벽 및 인터럽트 비활성화


대부분의 시스템과 서버는 방어 매커니즘으로 방화벽을 설정함.

악성 스크립트에서 공격자는 방어 회피 전술로 방화벽(ufw, iptables)을 비활성화하려고 함.


< 방화벽 비활성화 스크립트 >


또한, 공격자들은 마스크 불가능 인터럽트(NMI : Non-Maskable Interrupt) 를 비활성화하는 명령어를 사용함.

마스크 불가능 인터럽트는 CPU가 그것이 하고 있었던 것을 멈추고 명령어 포인터를 특정 주소의 지점으로 바꾸고 그 위치에서부터 코드를 실행하는 것을 계속하게 함. 

이와 관련된 워치독(Watchdog)은 기본적으로 특정 주어진조건과 시간에 인터럽트를 생성하는 구성 가능한 타이머 메커니즘임.

시스템이 정지되는 경우 NMI 워치독 인터럽트 핸들러(NMI Watchdog Interrupt Handler)는 시스템 정지를 담당하는 작업을 종료함.

이러한 방어 매커니즘을 피하기 위해 공격자는 sysctl 명령어를 사용하여 워치독 기능을 비활성화하거나 값을 0 으로 설정하여 일시적으로 비활성화함.


< 커널 워치독 비활성화 스크립트 >




( 3 ) 리눅스 보안 모듈(LSM) 비활성화


악성 쉘 스크립트는 SElinux, Apparmor 와 같은 리눅스 보안 모듈도 비활성화함.

이러한 모듈은 강제적 접근통제 (MAC : Mandatory Access Control) 정책을 구현하도록 설계됨.

보안 관리자는 이러한 모듈을 구성하여 사용자에게 시스템에 설치되거나 실행 중인 응용 프로그램에 대한 제한된 액세스를 제공할 수 있음.


AppArmour


AppArmour 는 보안 강화를 위해 Firefox 와 같은 응용 프로그램을 잠그는 데 사용되는 리눅스 보안 기능임.

사용자는 특정 응용 프로그램에 제한된 권한을 부여하여 우분투의 기본 구성에서 응용 프로그램을 제한할 수 있음.


< AppArmour 비활성화 명령어 >


SElinux


SElinux 는 보안 관리자가 특정 응용 프로그램 및 유틸리티에 보안 컨텍스트를 적용할 수 있는 리눅스 시스템의 또 다른 보안 기능임.

일부 웹 서버에서는 쉘이 비활성화되거나 제한하므로 RCE(Remote Code Execution) 공격자는 일반적으로 다음을 우회하고자 비활성화함.


< SElinux 비활성화 명령어 >




( 4 ) ACL 수정


ACL 또는 액세스 제어 목록에는 파일 및 유틸리티에 대한 권한이 부여되는 규칙이 포함됨.

파일 시스템 ACL 은 시스템에 액세스할 수 있는 사용자와 사용자에게 허용되는 권한을 운영 체제에 알려줌.

리눅스의 Setfacl 유틸리티는 ACL 을 수정하고 제거하는데 사용됨.

아래 스크립트 화면에서 사용자의 chmod 권한을 설정하는 setfacl 사용법을 볼 수 있음.


< ACL 수정 >




( 5 ) 속성 변경


리눅스의 chattr 명령어는 파일의 특정 속성을 설정 및 해제하는 데 사용됨.

chattr 명령어에 대한 자세한 설명은 아래 링크를 참조 바람.

링크 : https://man7.org/linux/man-pages/man1/chattr.1.html


공격자는 자신이 삭제한 파일에 이를 사용하거나 사용자가 파일을 삭제 및 변경할 수 없도록 만듬.


< 드롭된 악성 파일에 대한 chattr 명령어 사용 >


< passwd 파일을 수정할 수 없도록 만듬 >




( 6 ) 일반 유틸리티 이름 변경


악성 스크립트 또 다른 샘플(해시값 : d7c4693f4c36d8c06a52d8981827245b9ab4f63283907ef8c3947499a37eedc8)에는 다른 이름으로 사용되는 wget, curl 과 같은 일반적인 유틸리티도 포함되어 있음.

이러한 유틸리티는 일반적으로 원격 IP 에서 파일을 다운로드하는 데 사용됨.

공격자는 이러한 유틸리티를 사용하여 C2 서버에서 악성 파일을 다운로드함.

wget, curl 유틸리티 명명식으로 모니터링하는 보안 장비를 우회하고자 다른 이름을 사용함.


< 스크립트에서 유틸리트 이름 변경 >


< 이름이 바뀐 유틸리티 사용 >


댓글 없음:

댓글 쓰기