Yara 4.0.0-4.0.1 업데이트 정리 : base64, base64wide, private 등
20년 4월 29일 yara 4.0.0이 업데이트가 됐습니다[1][2]. 크게 새로운 modifier은 base64, base64wide, private가 생겼으며, "pe" 모듈에 pdb_path, export_details, exports_index가 추가되었다. 나머지 항목들은 기존 기능을 개선하거나 버그를 FIX한 형태이므로 언급은 하지 않겠습니다.
Base64 strings
- base64 modifier는 base64 인코딩된 문자열을 검색할 때 사용된다.
- base64wide modifier는 base64 modifier와 동일하게 동작하지만, base64 동작 후 wide 형태로 변환된다.
- base64 및 ba64wide modifier는 text string에서만 지원된다.
- (주의) 16진수 문자 또는 정규식, modifier(xor, fullword, nocase)와 함께 사용하면 컴파일러 오류가 발생한다.
- YARA가 base64 인코딩 후 선행 및 후행 문자를 제거하는 방식 때문에 "Dhis program cannow" 및 "This program cannot"의 base64 인코딩 중 하나가 동일하다.
- 실행은 (Figure 2)의 2번과 같다.
- 아래 룰과 같이 custom alphabet을 지원한다.
rule Base64Example2
{
strings:
$a = "This program cannot" base64("!@#$%^&*(){} [].,|ABCDEFGHIJ\x09LMNOPQRSTUVWXYZabcdefghijklmnopqrstu")
condition:
$a
}
Private strings
- YARA의 모든 문자열은 private로 표시될 수 있으며, 이는 YARA의 출력에 포함되지 않는다. 커맨드라인으로 -s 옵션을 사용하면 탐지된 스트링이 출력된다. 하지만, private을 사용하면 스트링은 출력이 안되지만 룰에 탐지되었다는 표시는 출력된다. (Figure 2)는 yara 4.0.1 버전에서 아래 룰(Base64Example2)을 테스트한 것으로, 1번은 private 키워드를 추가했을 때 나오는 출력화면, 2번은 private을 지웠을 때 나오는 화면이며, 3번은 base64, private modifier를 모두 지웠을 때 나오는 화면이다. 위에서 설명한 것과 같이 private을 적용하면 1번에서 탐지된 룰 이름은 나오지만, 탐지된 오프셋과 내용은 출력되지 않는다.
rule Base64Example3
{
strings:
$a = "This pdrogram cannott" base64 private
condition:
$a
}
위에서는 새롭게 추가된 modifier에 대해 알아보았다. 아래는 PE 모듈에 새롭게 추가된 condition에서 사용할 수 있는 함수이다. exports_index, exports_index, exports_index, pdb_path, export_details가 추가되었다. (해당 함수에 대한 실습은 추후 업로드할 예정)
커맨드라인에서 사용할 수 있는 옵션인 --scan-list가 추가되었다.
참고 :
[1] github.com/VirusTotal/yara
VirusTotal/yara
The pattern matching swiss knife. Contribute to VirusTotal/yara development by creating an account on GitHub.
github.com