보안/악성코드

RedlineStealer 악성코드 소스코드 분석(2)

haerim9.9 2025. 8. 8. 19:40

<WriteLine 함수 내용>

  1. 20번째 줄 → SystemNetConfigurationWebProxyScriptElementRetryIntervalValidatorL 클래스의 Check 함수를 통해 지역/국가 필터링, 필터링 대상이면 종료. 문제 없으면 계속 실행.
  2. 24번째 줄 → SystemNetNetworkInformationAdapterFlagsF의 Message 비어있는지 확인, 비어있으므로 실행X.
  3. 33번째 줄 SystemUriComponentsg 클래스의 Read 함수를 통해 SystemNetNetworkInformationAdapterFlagsF 클래스의 IP를 Key를 이용해 복호화.   복호화된 문자열(=실제 C&C 서버 목록)을 개별 서버 주소로 분리.
  4. 38번째 줄 → dnlibDotNetWriterlMDTablet 클래스의 Id1 함수를 통해 서버 연결 테스트, 통과하면 if문 실행 → flag값 true로 조정, while문 탈출
  5. 49번째 줄 → dnlibDotNetWriterlMDTablet 클래스의 Id5 함수를 통해 데이터 전송, 성공 시 while문 탈출
  6. 61번째 줄 SystemDiagnosticsAssertSectionO 객체 동적 생성 후 Invoker 함수로 데이터 처리.

 

→ 난독화되어 있는 부분 때문에 완벽히 분석하는 데에 한계가 있음.

 

33번째 줄을 보면 네트워크 통신 기능을 포함하나, 해당 실행 환경/조건에서는 발동하지 않는 것으로 보임.

 


<호출된 함수 및 클래스 상세>

 

SystemNetConfigurationWebProxyScriptElementRetryIntervalValidatorL 클래스

더보기

 

Check 함수 :

  • CultureInfo 클래스로 객체 생성(시스템 클래스로, 문화권에 관한 정보를 제공함.)
  • 지역/국가 기반으로 필터링
  • 제한되는 국가면 true 반환 후 중지, 제한X 국가면 false 반환 후 계속해서 실행(WriteLine 함수에서 중지됨)

 

필터링 국가

 

dnlibDotNetWriterlMDTablet 클래스

더보기

Id1 함수 : RequestConnection 함수와 Id3 함수 호출 결과 && 연산해서 반환 → 서버 연결 테스트, 통과하면 true

RequestConnection 함수 :

IContextChannel contextChannel = new ChannelFactory<...>
    (SystemCodeDomCodeDirectiveB.CreateBind(), new EndpointAddress(new Uri("net.tcp://" + address + "/"))
  • 실제 연결 설정

Id3 함수 : 서버 연결 유지 확인 ???

 

Id4 함수 : 사용자 정보 수집?

SystemNetMailSupportedAuthl 구조체, DataContract 형태 → WCF

 

Id5 함수 : 수집된 데이터 전송????

MicrosoftWinUnsafeNativeMethodslMarshalJ 클래스,  이것 역시 DataContract 형태 → WCF

 

*DataContract = WCF에서 사용하는 개체에 대한 정보를 매핑시켜줌

*WCF(Windows Communication Foundation) = 한 서비스 종단점에서 다른 서비스 종단점으로 데이터를 비동기 메시지로 보낼 수 있음.

 

 

connector : dnlibDotNetWriterMetadataEventw 인터페이스 객체

 

 

SystemNetNetworkInformationAdapterFlagsF 클래스

더보기

 

정적 변수로 IP, ID, Message, Key, Version 값이 저장되어 있다.

특이사항 : IP와 ID 값이 난독화

 

SystemUriComponentsg 클래스

더보기

Xor 함수 : input 데이터를 stringKey로 XOR 연산

 

FromBase64 함수 : Base64 문자열 → 바이트 배열 → 문자열로 변환

 

BytesToStringConverted 함수 : UTF-8 문자열 변환

 

Read 함수 : if문으로 비어있으면 빈 문자열 반환, 아니면 Base64 디코딩 → XOR 복호화

 

 

MicrosoftWinUnsafeNativeMethodslMarshalJ 클래스 

더보기

수집된 정보 패키징 같은데 Id1~Id13까지 전부 비슷한 형태라 파악하기 어려움.

 

SystemNetMailSupportedAuthl 구조체

더보기

이것 역 Id1~Id15까지 전부 비슷한 형태라 파악하기 어려움.

 

dnlibDotNetWriterMetadataEventw 인터페이스 → 구현체를 찾아야 전체적인 로직을 알 수 있음... → 근데 발견 X

더보기

인터페이스인 만큼, 사진의 코드만으로 기능을 파악하기가 어려워 추정만 했다..

 

Id1 함수 : 반환 타입 bool

Id2 함수 : 반환 타입 MicrosoftWinUnsafeNativeMethodsMarshalJ 

Id3 함수 : SystemNetMailSupportedAuthI를 매개변수로 받음, 사용자 정보?

Id4 함수 : 사용자 정보?

Id5 함수 : 화면/디스플레이?

Id6 함수 : 방어 프로그램?

Id7 함수 : 언어 설정?

Id8 : 설치된 소프트웨어?

Id9 : 실행 중인 프로세스?

 

SystemSecurityAuthenticationCipherAlgorithmTypeG 클래스

더보기

추상 클래스  → 구현 클래스 : SystemDiagonostAssertSectionO

 

dnlibDotNetMDMetadataFactorye

더보기

Extract 함수 : 

  • T → 반드시 SystemSecurityAuthenticationCipherAlgorithmTypeG를 상속받는 클래스
  • 버전 기반 분기 → 1이면 SystemDiagonostAssertSectionO 생성, 그 외는 SystemComponentModelTypeDescriptorComNativeDescriptionProviderH 생성
  • 동적 객체 생성
    -런타임에 동적으로 객체 생성
    -리플렉션 기반 팩토리 패턴

→ SystemNetNetworkInformationAdapterFlagsF에 저장된 Version 정보는 1이므로 SystemDiagonostAssertSectionO 생성

 

SystemDiagonostAssertSectionO 클래스

더보기

SystemSecurityAuthenticationCipherAlgorithmTypeG의 구현 클래스

 

생성자 : 

  • Main, First : 메서드 목록 배열 → 메서드 집합 초기화
    난독화된 함수명으로 메서드 참조

 

Invoker 함수 : SystemSecurityAuthenticationCipherAlgorithmTypeG의 추상 메서드를 구현, sdf9j3nasd 함수에 실제 작업을 위임

 

sdf9j3nasd 함수 :

  • result.Id* 형태의 리스트 생성 → 데이터 컨테이너 초기화, 데이터 저장공간 준비
  • 시스템 기본 정보 수집(IP, SystemCache 폴더 상태, 초기 검증)
  • First 배열의 함수 순차 실행
  • 추가 데이터 수집

 

 LSIDsd2 함수 : Main 배열 함수 순차적 실행

Visible 함수 : SystemCache 폴더 관리 → 지속성 확보 및 흔적 관리

 

그외 난독화된 많은 함수들