NOTICE




1. 기본적인 이해


 운영체제에서 특정 행위를 발생시키기 위해서는 코드와 데이터가 필요합니다.


코드    → 특정 행위를 일으키는 주체

데이터 → 코드가 실행될 때 필요한 부가적인 정보


 코드와 데이터를 묶어서 큰 의미의 데이터 봤을 때, 운영체제에서 데이터는 두가지 형태로 존재할 수 있습니다.


하드 디스크파일 상태로 존재 or 메모리에 상주


 하드 디스크는 데이터 보관소입니다. 다양한 데이터가 파일이라는 이름의 통 안에 담겨 하드디스크에 보관되어 있습니다.

 메모리는 데이터가 활동할 수 있는 놀이터입니다. 파일 상태의 데이터가 메모리에 올라가면 운영체제에서 특정 행위가 발생합니다.


 일반적으로 파일(프로그램)을 실행할 때, 해당 파일을 더블 클릭하죠? 더블 클릭으로 인해 파일 데이터가 메모리로 올라가고 메모리에 올라간 데이터의 활동(코드 동작)으로 인해 행위가 발생하게 되는 겁니다.


 그런데 메모리 공간은 사용이 끝나면 비워줘야 합니다. 이때 메모리에 존재하던 데이터도 사라집니다.




2. 악성코드 vs Fileless 악성코드


 일반 악성코드와 Fileless 악성코드의 차이는 악성 행위를 발생시키는 데이터의 위치와 관련이 있습니다. 악성 데이터가 하드디스크에 파일 상태로 존재하느냐 메모리에 위치하고 있느냐의 차이인 것이죠.




3. 악성 데이터의 위치가 왜 중요한가요?


 데이터가 메모리 상에만 존재한다는 것은 언제든 사라질 수 있다는 말입니다. 백신의 입장에서 범인을 잡기 위해서는 몽타주가 필요한데 몽타주 작성에 필요한 데이터 확보가 용이하지 않을 수 있습니다. 그리고 모든 백신이 메모리를 직접 검사하는 것이 아니기 때문에 악성 데이터 입장에서는 더 안전할 수 있습니다.




4. Fileless 악성코드는 메모리에만 존재하나요?


 Fileless 악성코드가 파일로 존재하지 않는 악성코드라고 생각하시는 분들이 있는데 그렇지 않습니다. 악성 데이터가 파일로 유입되어 실행되는 경우도 있습니다. 이 경우 다음과 같은 절차를 거치기 때문에 파일로 존재하지 않는 것처럼 보입니다.


악성 파일 유입 악성 파일 실행 → 악성 파일이 정상 프로세스에 악의적인 데이터 삽입 → 악성 파일 삭제




5. Fileless 악성코드의 한계


 악성코드 입장에서 지속성은 가장 중요한 문제 중 하나입니다. 사용자가 컴퓨터를 사용하는 매순간 실행되어야 하는 것입니다.


 처음에는 Fileless 악성코드가 메모리에만 남아있는 악의적인 데이터를 의미했습니다. 그러나 현재 지속성을 위해 파일 시스템 일부에 의존하는 악성 데이터를 포괄하는 용어로 발전되었습니다. Windows 레지스트리에 악성 데이터를 보관하는 경우가 대표적입니다. 엄밀히 따졌을 때 레지스트리 정보 또한 "%WINDIR%\System32\config" 경로에 하이브 파일로 기록되어 있습니다.


 한편 일회성으로도 충분할 수 있다면 이 문제에서 자유로울 수 있을 것입니다. 여기에 가장 적합한 악성코드가 랜섬웨어입니다. 얼마전 Trand Micro에서 발표한 SOREBRECT Ransomware가 이 경우에 해당합니다. SOREBRECT Ransomware는 정상 svchost.exe 프로세스에 악성 데이터를 삽입한 뒤 자신의 흔적을 삭제합니다. 정상 svchost.exe 프로세스에 악성 데이터는 타깃 파일 암호화가 끝나면 종료됩니다.


 Fileless 악성코드가 무엇인지 보다 쉽게 이해했으면 하는 의도에서 작성했기 때문에 원론적인 개념과 조금은 차이가 있을 수 있습니다.


 이상으로 '[개념이해] Fileless 악성코드'에 대한 포스팅을 마치도록 하겠습니다.