
이스라엘 조직을 겨냥한 Bibi-Windows Wiper에 대한 기술적 분석
10월 30일, Security Joes 사고 대응 팀은 친(親)하마스 핵티비스트 그룹이 인프라를 파괴하기 위해 배포한 "BiBi-Linux" Wiper라는 새로운 Linux Wiper를 발견했습니다. 그리고 2023년 11월 1일, ESET Research는 2023년 이스라엘-하마스 분쟁 기간에 처음 등장한 하마스 지원 핵티비스트 그룹 BiBiGun이 배포한 Windows 버전의 BiBi Wiper에 대해 트윗했습니다.
이 글에서는 "BiBi-Windows Wiper" 로 알려진 Windows 버전의 BiBi Wiper를 살펴보겠습니다.
실행 시 BiBi-Windows Wiper는 BiBi Wiper에 전달된 인자가 있는지 확인합니다. 여기서 인자는 파괴할 디렉터리입니다 - bibi.exe <directory_to_destroyed>. 인자가 제공되지 않으면 대상 드라이브를 가져오기 위해 다음과 같은 루틴을 수행합니다.
하드코딩된 경로 "C:\Users"를 읽습니다.
GetLogicalDrives()를 사용하여 현재 사용 가능한 디스크 드라이브를 가져옵니다. 반환 값은 비트마스크이며, A-Z(26개) 드라이브를 반복합니다. 그런 다음 검색된 비트마스크에 대해 비트 테스트를 수행하여 시스템에서 접근 가능한 드라이브를 확인하고 드라이브 이름에 ":\"를 추가합니다.
여기서 i != 2를 확인하여 C 드라이브를 제외합니다. 여기서 2는 C 드라이브의 비트마스크 위치입니다.
그런 다음 C 드라이브를 제외한 사용 가능한 드라이브에 대해 드라이브 유형을 검색하는 GetDriveTypeA()를 실행합니다. BiBi-Windows Wiper는 여기서 다음 드라이브 유형만 대상으로 합니다.

따라서 BiBi-Windows Wiper는 다음을 대상으로 합니다.
또한 대상 디렉터리를 콘솔에 출력하고 GetNativeSystemInfo()에서 NumberOfProcessors를 검색한 다음, numberofprocessors를 기반으로 스레드를 계산하여 콘솔에 출력합니다.

또한 역순으로 저장된 명령을 읽는 새 스레드를 생성한 다음 CreateProcessA를 사용하여 새 프로세스를 생성해 해당 명령을 실행합니다. 명령은 다음과 같습니다.

또한 기본 Wiper 루틴을 실행하는 또 다른 스레드를 생성합니다. Wiper 루틴은 다음 작업을 수행합니다.

이제 BiBi-Windows Wiper가 시스템의 데이터를 어떻게 파괴하는지 알아보겠습니다.
Mersenne Twister PseudoRandom Number Generator Algorithm(메르센 트위스터 의사난수 생성 알고리즘)을 구현합니다.
sub_140008BF0() 함수에서 생성된 난수는 값 "0xFF + 1 = 100"으로 모듈로(%) 연산을 수행하며, 모듈로 연산의 출력(나머지)이 대상 파일에 바이트 단위로 덮어써지는 바이트입니다.
아래는 "hello" 데이터로 구성된 파일에 대해 이 5개의 랜덤 바이트가 루프로 덮어써지는 예시입니다.
ogfile_val -> rand_num % (hardcoded_val + 1) -> overwrite_val
h - 0xDD9B40A5 % 0x100 -> 0xA5
e - 0x37905317 % 0x100 -> 0x17
l - 0x54B7A20C % 0x100 -> 0x0C
l - 0xDBD10533 % 0x100 -> 0x33
o - 0x18ED3C42 % 0x100 -> 0x42
랜덤 바이트로 덮어써진 파일 - 파괴됨!

이제 파일의 데이터가 랜덤 바이트로 덮어써지고 파일이 파괴되면, BiBi Wiper는 다음과 같은 방식으로 파일 이름을 변경합니다.
rand_no = twisterfunc()
remainder_output = rand_no % (0x3D + 1)
wide_string = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
filename_byte = wide_string[remainder_output * 2]
Thus,
if random num = 0xC6D15D79
mod_out = 0xC6D15D79 % 0x3E => 0x31
offset = 0x31 × 0x2 = 0x62
so the 62nd indexed value in the wide string becomes one of the character for the filename. In this case the value is "n"
같은 루틴은 0xA (10)회 실행되며, 모든 인덱싱된 값이 연결되어 예: 1wnRvB6teT 와 같은 랜덤 파일 이름을 형성합니다. 그런 다음 확장자 ".BiBi" (BiBi는 이스라엘 총리 베냐민 네타냐후의 별명입니다) 가 끝에 오는 라운드 번호와 함께 다음 방식으로 추가됩니다 - <rand_filename>.BiBi

따라서 BiBi-Windows Wiper는 다음과 같은 방식으로 대상 디렉터리의 모든 파일을 파괴합니다. 즉, 파일의 데이터를 랜덤 바이트로 덮어씁니다. 루프, 즉 라운드가 무한하므로 Wiper는 멈추지 않고 파일을 무한히 재귀적으로 여러 번 랜덤 바이트로 덮어쓰며 시스템의 파일을 완전히 파괴합니다!
BiBi-Windows Wiper 실행 화면: 대상 디렉터리, CPU 코어, 스레드, 라운드 번호, 통계 및 .BiBi 확장자로 파괴된 파일을 보여줍니다.

읽어주셔서 감사합니다! - knight0x07