yara rule에서 많이 쓰이는 strings에 대해 자세히 알아보자
각 strings는 $로 시작하는 식별자(알파벳, 숫자 그리고 _를 사용가능)를 text나 hex, 정규식(이후 regex) 형태로 정의한다.
rule sample
{
strings:
$a1="test"
$a2={12 34 56}
$a3= /http:\/\/[a-z]{5}.com/
condition:
$a1 or $a2 or $a3
}
text의 형태로 넣을때는 "(큰 따옴표)로 hex의 형태로 넣을 때는 {}(중괄호)를 사용한다.
hex에서 띄어쓰기는 있어도 되고 없어도 된다. 하지만 hex형태에서 10진수는 사용불가함을 알자
regex형태는 양 끝에 "/"를 넣어서 만든다. 안에는 정규식을 넣으면 된다.
이제 진짜 활용성이 높은 jump([#-#]), wild-cards(??), alternatives(|)를 알아보자.
rule sample
{
strings:
$wild1={12 ?? 56}
$wild2={12 3? 56}
$jump1={12 [3-4] 56}
$alternatives1={12 (34|43) 56}
condition:
$wild1 or
$wild2 or
$jump1 or
$alternatives1
}
먼저 wild-cards는 리눅스에서의 wild-cards와 매우 유사하다. ??면 그곳에 뭐가 들어가도 상관없다는 것이고 3?는 hex값이 3으로 시작하되 뒤는 상관없다는 것이다.(30,31,32 ....)
jump는 wild-cards여러개를 줄인 형태라고 보면 된다.
[3-4]면 ?? ?? ??와 ?? ?? ?? ??를 대체한다. 3칸~4칸은 무시하고 다음것을 보겟다는 것이다.
alternatives는 생긴것 대로 그냥 or이다. 괄호로 묶고 앞과 뒤중 하나라도 만족하면 true가 된다.
마지막으로 ascii wide fullword nocase에 대해 알아보자
rule sample
{
strings:
$no="test" ascii wide fullword nocase
condition:
$no
}
띄어쓰기로 되어있듯 각각은 모두 다른 옵션이다.
ascii는 기본 옵션,
wide는 유니코드,
fullword는 숫자이외의 문자로 표시,
nocase는 대소문자 구분안함
보통 저렇게 모두 사용한다.
strings는 여기까지 하자