현재 자바 스크립트 악성코드를 분석해보고 있는데 코드들을 상당히 난잡화 해둔 악성코드로 보였다.
무난하게 분석해 나가던 도중에 갑자기 도저히 이해할 수 없는 다음과 같은 코드를 만나고 상당히 많이 당황하였다.
ohLgj5=DDrbLO0('a1Qe4dG*]6zY^k8b]#&,m8$[x_GD3]Nvj5dsn7[F[8ecu[S34Rlc]4r;iadpDt='[wOrjuux8](/[^xS@0ietrc9p]/g,'')); |
위의 코드 중에서 DDrbLO0은 eval 함수를 가리키고 있고 wOrjuux8는 'replace' 문자열을 저장하고 있다.
DDrbLO0 = eval; wOrjuux8='replace'; |
처음에는 wOrjuux8의 존재를 눈치 채지 못하고 도저히 eval 함수를 통해 명령어로 해석될 수 없는 문자열 집합과 문자열 밖으로 까꿍하고 나온 녀석들에 패닉에 빠졌다.
그러던 중 wOrjuux8가 눈에 익어 코드 상단을 보니 'replace'문자열이 저장되어있었고 하나씩 의문점이 풀리기 시작했다.
일반적으로 replace 함수는 str.replace('this','that'); 같은 방식으로 쓰이고 있으나 위 코드에서는 특이하게 replace를 대괄호로 감싸고 있다.
.함수명 를 통한 함수 접근이 아닌 ['함수명']를 통해 접근하고 있는것으로 보였는데 테스트를 위하여 다음과 같은 코드를 작성해 보았다.
alert('ABCDEF'['toLowerCase']()); |
결과는
성공적으로 toLowerCase 함수가 작동되어 소문자 abcdef가 작동되었다.
그 다음 replace 함수의 인자 값인 (/[^xS@0ietrc9p]/g,''));은 정규식을 사용했는데 xS@0ietrc9p을 제외한 모든 문자를 제거하라는 의미로 사용되었다.
위 정규식대로 replace 함수가 동작하고 문자열을 재조합하면
'a1Qe4dG*]6zY^k8b]#&,m8$[x_GD3]Nvj5dsn7[F[8ecu[S34Rlc]4r;iadpDt='
즉, execScript가 되어 최종적인 코드는
ohLgj5=eval(execScript); |
가 되고 이는 ohLgj5=execScript; 와 같은 결과를 갖기 때문에 ohLgj5를 이용해 execScript를 호출할 수 있게 된다.
P.S. 예전에는 스크립트를 이용한 악성코드는 단순하고 재미없는 것으로 생각했는데 이 코드들을 보고 생각이 많이 바뀌었다. (현재 위와 비슷한 코드들이 빼곡하게 쌓여있다.)
반응형
'기타 > DMZ' 카테고리의 다른 글
Microsoft Technet Windows Server 2003 보안 가이드 (0) | 2012.04.30 |
---|---|
윈도우 설치 관련 로그 저장 위치 (2) | 2012.04.27 |
2011.1.4 Xema worm 동적 분석 메모 (0) | 2012.01.04 |
2011.10.07 KITRI 메모 (0) | 2011.10.07 |
2011.09.30 Tacademy 안드로이드 10일차 메모 (0) | 2011.09.30 |