악성코드와 백신/백신 개발일지

[백신 개발](2)[EICAR test file]

황올뱀 2026. 3. 3. 14:06

EICAR test file 백신 만들기

EICAR test file?

https://www.eicar.org/download-anti-malware-testfile/
백신 테스트용 "가짜" 바이러스이다.
    악성 행위는 하지 않고 그냥 악성

 

windows 보호를 잠깐 꺼놓고
메모장에

X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*

이 문자열을 복붙하고
확장자를 .com으로 하면 된다.
    그러나 EICAR 파일은 16비트 DOS 프로그램으로 64비트 환경에서는 추가로 환경을 세팅해줘야 함
    -> 백신이 탐지하기에 .txt만 써도 되니 따로 환경은 설정 안함.

 

기본 이론

정탐 & 오탐 & 미탐

정탐: 정상을 정상으로, 악성을 악성으로 탐지
오탐: 정상을 악성으로 탐지
미탐: 악성을 정상으로 탐지
-> 악성코드 탐지에서는 미탐이 오탐보다 더 치명적!!!

 

탐지 방법

시그니처 기반 탐지

이미 발견하고 분석한 악성 코드의 고유한 특징(시그니처)를 이용해 탐지하는 방법

  • 장점
    빠름
    이미 알려진 바이러스는 잘 잡아냄
  • 단점
    신종, 변종 바이러스엔 약함
      해커가 코드를 살짝만 수정해도 탐지 피하기 가능

휴리스틱 탐지

악성코드가 공통적으로 보이는 특징과 패턴을 rule-base로 점수를 매겨 탐지

  • 장점
    시그니처 탐지 방법보다 더 유연한 탐지
  • 단점
    오진의 가능성

행위 기반 탐지

동적으로 파일을 실행하며 행동을 감시
이때 밀폐된 환경인 샌드박스에서 파일을 돌린다

  • 장점
    새로운 악성코드를 탐지하는데 가장 효과적
  • 단점
    자원이 많이 들음

치료

  • 수리
    만약 감염된 파일의 바이트를 되돌리는 법을 알고 있다면 정상으로 되돌리기
    https://arxiv.org/pdf/1306.4666 <- 여기에 바이러스로 손상된 바이트에 대한 내용
  • 격리
    치료 불가능하거나 위험하면 실행 차단
  • 삭제
    웜 같이 파일 자체가 악성코드인 경우 파일 자체를 삭제하면 된다
  • 시스템 복구/재설치
    심각한 손상일 경우 걍 포맷하고 다시 설치

 

실제 구현

매우 단순한 시그니처 기반으로 구현하겠다.

문자열 탐지

맨 앞의 3바이트를 보면 X5O이다.
"EICAR의 앞 3바이트는 X5O" 이라는 시그니처를 가지고 탐지를 할 수 있다.

# 문자열로 진단
if (fbuf[0:3] == b'X5O'):
    print("virus!")
    # 치료하기
    #os.remove('EICAR.txt') # 삭제로 치료는 주의가 필요
else:
    print("benign!")

물론, 탐지하는 문자열이 많을수록 오탐은 적어진다

해시 탐지

앞에서는 일부 문자열만 가지고 시그니처를 잡았지만,
파일의 해시값으로 탐지하는게 더 일반적이다.

해시값은 virustotal에서 알 수 있다.


https://www.virustotal.com/gui/file/275a021bbfb6489e54d471899f7db9d1663fc695ec2fe2a2c4538aabf651fd0f/details

 

여기서 구한 MD5 해시를 가지고 탐지를 해보겠다.
MD5 = 44d88612fea8a8f36de82e1278abb02f

import sys
import hashlib
import os

# EICAR.txt 파일 읽기
fp = open('EICAR.txt', 'rb')
fbuf = fp.read()
fp.close()

# MD5 해시를 이용한 진단
if (hashlib.md5(fbuf).hexdigest() == '44d88612fea8a8f36de82e1278abb02f'):
    print("virus!")
    # 치료하기
    #os.remove('EICAR.txt') # 삭제로 치료는 주의가 필요
else:
    print("benign!")

hashlib.md5에서 파일에서 읽은 바이트를 md5해시로 바꿔주고
이걸 virustotal에서 가져온 md5 해시랑 비교한다.

 

모든 자료는 여기에
https://github.com/VeryBigsilver/malware-vaccine/tree/main/1_EICAR

반응형