
Avast JavaScript 대화형 셸
참고: 2020년 3월 11일, Avast은 트윗을 통해 이 인터프리터를 전역적으로 비활성화하기로 결정했다고 발표했습니다!
Avast 안티바이러스의 주요 프로세스는 AvastSvc.exe이며, SYSTEM 권한으로 실행됩니다.

이 서비스는 저수준 안티바이러스 엔진을 로드하고, 파일시스템 미니필터나 가로챈 네트워크 트래픽 같은 출처에서 수신한 신뢰할 수 없는 데이터를 분석합니다.
설계상 높은 권한을 가지며 신뢰할 수 없는 입력을 처리함에도 불구하고, 이 프로세스는 샌드박스 처리되지 않았고 완화 조치 적용도 부실합니다. 이 프로세스의 모든 취약점은 치명적이며, 원격 공격자가 쉽게 접근할 수 있습니다.
그러니까... 맞춤형 JavaScript 인터프리터가 포함되어 있다는 게 별로 좋지 않을 수도 있습니다....???? 🙃

이 저장소에는 취약점 연구를 위해 Linux에서 인터프리터를 테스트할 수 있는 대화형 셸이 포함되어 있습니다.
사용 방법은 다음과 같습니다. 먼저 종속성을 설치하세요.
$ sudo apt install libreadline-dev:i386 libc6-dev-i386 gcc-multilib
$ sudo yum install readline-devel.i686 glibc-devel.i686 libgcc.i686
이제 이 저장소를 클론할 수 있습니다.
$ git clone https://github.com/taviso/avscript.git
$ cd avscript
$ git submodule update --init --recursive
모든 것이 정상적으로 보이면 빌드하고 avscript가 준비됩니다.
$ make
성능상의 이유로 Avast은 만나는 모든 JavaScript 파일을 해석하지 않으며, 필요성을 판단하기 위해 휴리스틱을 사용합니다. 이 저장소에 포함된 javascript.txt 파일을 추가하면 항상 휴리스틱이 트리거된다는 것을 발견했습니다.
예를 들어, 취약점을 발견했고 Windows에서 재현하려면 먼저 다음과 같이 하면 됩니다.
$ cat yourtestcase.js javascript.txt > ReproForWindows.js
이제 예상대로 작동하는지 확인합니다. 예:
$ ./avscript ReproForWindows.js
main(): File ReproForWindows.js` loaded, about to initialize interpreter...
Segmentation fault (core dumped)
그런 다음 Windows에서도 크래시가 재현되는지 확인합니다.
Avast 서비스는 보호된 프로세스이므로 사용자 공간에서 디버깅하는 것이 까다롭습니다. kd가 설정되어 있다면 간단히 보호를 해제한 후 사용자 공간에서 디버깅이 잘 작동합니다.
32비트에서 작동하는 빠르고 쉬운 해결 방법은 다음과 같습니다. (참고: PatchGuard는 x64에서 이를 허용하지 않지만, 중단점 명령을 사용하여 비슷한 작업을 수행할 수 있습니다.)

"문제 해결" 아래에 "자기 보호 사용"이라는 설정이 있으며, 이를 비활성화해야 합니다. 이 설정은 SSDT에서 OpenProcess() 후킹을 비활성화하는 것으로 보이며, 일반적으로 이곳에서 자체 프로세스를 블랙리스트에 등록합니다.
서비스가 일시 중단된 동안 파일 시스템 작업이 교착 상태에 빠지지 않도록, 연결 중에는 Avast UI에서 "방패"를 일시적으로 비활성화해야 할 수도 있습니다.
Avast은 엔진에 대한 기호를 공개하지 않지만, IDA나 gdb로 디버깅하는 것은 여전히 가능합니다. Linux에서 Windows 코드를 디버깅하는 방법에 대한 몇 가지 참고 사항은 loadlibrary 문서에 있습니다.
IDA를 사용하려면 gdbserver 백엔드를 사용하는 것을 권장합니다.
다음과 같이 사용하면 됩니다. 먼저 gdbserver 패키지를 설치해야 할 수도 있습니다.
$ gdbserver 0.0.0.0:23946 ./avscript
의사 코드 중단점을 포함하여 놀랍도록 잘 작동합니다.

취약점을 발견하면 치명적이며 웜 가능성이 높습니다.
🔥 긴급히 신고해 주시기 바랍니다. 🔥