악성코드
더 많은 작업
악성코드(Malware)는 컴퓨터, 서버, 모바일 기기 등의 정보시스템에서 사용자의 의도에 반하여 악의적인 동작을 수행하도록 만들어진 소프트웨어 또는 코드를 말한다. 악성 소프트웨어(Malicious Software)의 줄임말인 Malware를 번역한 표현이다.
정보 탈취, 시스템 파괴, 원격 제어, 광고 표시, 금전 요구, 다른 시스템으로의 확산 등 다양한 목적으로 사용된다.
악성코드는 특정한 하나의 프로그램 형태를 의미하는 것이 아니라 악의적인 목적이나 기능을 가진 소프트웨어를 포괄하는 개념이다.
악성코드의 기능에는 다음과 같은 것들이 있다.
- 파일 및 데이터 탈취
- 계정정보 및 인증정보 탈취
- 키 입력 기록
- 화면 캡처
- 파일 변조·삭제
- 파일 암호화
- 시스템 원격 제어
- 추가 악성코드 다운로드
- 보안 프로그램 무력화
- 시스템 내 지속성 확보
- 다른 시스템으로 확산
- DDoS 공격 수행
- 암호화폐 채굴
하나의 악성코드가 여러 기능을 동시에 가지고 있을 수도 있다.
예를 들어 특정 악성코드가 사용자 정보를 탈취하면서 원격 명령을 실행하고 추가 악성코드를 내려받는 기능을 함께 가질 수 있다.
악성코드와 컴퓨터 바이러스는 같은 의미로 사용되는 경우가 있지만 엄밀하게는 범위가 다르다.
악성코드가 상위 개념이고 바이러스는 악성코드의 한 종류다.
| 용어 | 설명 |
|---|---|
| 악성코드 | 악의적인 기능을 수행하는 소프트웨어나 코드를 포괄하는 개념 |
| 바이러스 | 다른 파일이나 프로그램 등에 자신을 삽입하여 복제·확산하는 특성을 가진 악성코드 |
따라서 랜섬웨어나 트로이 목마 등을 모두 '바이러스'라고 부르는 것은 기술적으로 정확하지 않을 수 있다.
과거에는 컴퓨터 바이러스가 대표적인 악성 프로그램이었기 때문에 일반적으로 악성코드 전체를 바이러스라고 부르는 경우가 많았다.
악성코드는 감염 방식, 확산 방식, 기능 등에 따라 여러 유형으로 분류할 수 있다.
하나의 악성코드가 여러 유형의 특성을 동시에 가질 수 있으므로 이러한 분류가 상호 배타적인 것은 아니다.
| 유형 | 설명 |
|---|---|
| 컴퓨터 바이러스 | 다른 파일이나 프로그램에 자신의 코드를 삽입하고 실행 과정에서 복제되는 악성코드 |
| 웜 | 다른 프로그램에 기생하지 않고 네트워크 등을 통해 스스로 복제·확산할 수 있는 악성코드 |
| 트로이 목마 | 정상적인 프로그램이나 파일처럼 위장하여 사용자가 실행하도록 유도하는 악성코드 |
| 랜섬웨어 | 파일을 암호화하거나 시스템 사용을 방해한 뒤 복구를 대가로 금전을 요구하는 악성코드 |
| 스파이웨어 | 사용자의 활동이나 개인정보 등을 몰래 수집하는 악성코드 |
| 정보탈취형 악성코드 | 계정정보, 쿠키, 암호화폐 지갑, 브라우저 저장정보 등 민감한 정보를 탈취하는 악성코드 |
| 백도어 | 정상적인 인증절차 등을 우회하여 공격자가 시스템에 다시 접근하거나 원격 제어할 수 있도록 하는 기능 또는 프로그램 |
| 루트킷 | 공격자의 악성 활동이나 파일·프로세스 등을 시스템에서 은폐하고 높은 권한을 유지하는 데 사용되는 악성코드 또는 기술 |
| 다운로더 | 다른 악성코드를 외부에서 내려받아 시스템에 설치하거나 실행하는 악성코드 |
| 드로퍼 | 내부에 포함된 다른 악성코드를 시스템에 생성하거나 설치하는 악성코드 |
| 봇 | 공격자의 원격 명령을 받아 DDoS, 스팸 발송 등의 작업을 수행하는 악성코드 |
| 암호화폐 채굴 악성코드 | 피해 시스템의 CPU·GPU 등의 자원을 이용해 공격자를 위한 암호화폐 채굴을 수행하는 악성코드 |
| 와이퍼 | 시스템이나 데이터를 삭제·손상시켜 정상적인 사용이나 복구를 방해하는 악성코드 |
악성코드는 다양한 경로를 통해 시스템에 침투할 수 있다.
피싱 이메일이나 메시지에 악성 첨부파일 또는 링크를 포함해 사용자가 악성코드를 실행하도록 유도할 수 있다.
문서 파일, 압축파일, 실행파일, 바로가기 파일 등이 이용될 수 있다.
정상적인 소프트웨어 개발사나 업데이트 시스템을 침해해 정상 프로그램이나 업데이트에 악성코드를 포함시키는 공급망 공격도 존재한다.
신뢰받는 소프트웨어를 통해 배포되기 때문에 다수의 조직이 동시에 감염될 수 있다.
사용자를 악성 웹사이트로 유도한 뒤 취약점을 공격하거나 악성 파일을 다운로드하도록 유도할 수 있다.
USB 메모리 등 이동식 저장장치를 통해 악성코드가 전달될 수도 있다.
인터넷과 분리된 시스템을 공격하기 위해 이동식 저장장치가 이용된 사례도 있다.
불법 복제 프로그램, 크랙, 게임 치트, 변조된 설치파일 등에 악성코드를 포함해 배포하는 경우도 있다.
현대의 악성코드는 하나의 실행파일이 모든 기능을 수행하기보다 여러 단계와 구성요소를 사용하는 경우가 많다.
예를 들어 다음과 같은 구조가 가능하다.
최초 침투 ↓ 드로퍼 또는 다운로더 실행 ↓ 주요 악성코드 설치 ↓ 지속성 확보 ↓ C2 서버 연결 ↓ 공격자 명령 수행 ↓ 정보 탈취 또는 추가 공격
모든 악성코드가 이러한 구조를 따르는 것은 아니다.
파일리스 악성코드(Fileless Malware)는 일반적인 실행파일을 디스크에 저장하는 방식을 최소화하고 메모리나 정상 시스템 도구 등을 이용해 악성 행위를 수행하는 악성코드 또는 공격 방식을 말한다.
PowerShell, WMI 등 운영체제에 기본적으로 존재하는 기능이 공격에 악용될 수 있다.
파일 기반 백신 탐지를 회피하는 데 이용될 수 있지만 '파일리스'라는 표현이 공격 과정에서 어떠한 파일도 전혀 사용하지 않는다는 의미는 아니다.
Living off the Land(LotL)는 공격자가 대상 시스템에 이미 설치되어 있는 정상 프로그램이나 운영체제 기능을 악용하는 공격 기법을 말한다.
정상적인 관리도구가 사용되기 때문에 단순히 프로그램의 존재 여부만으로 정상 행위와 공격을 구별하기 어려울 수 있다.
LotL 자체가 악성코드의 종류인 것은 아니며 악성코드와 함께 사용되거나 악성 파일 사용을 최소화하기 위해 이용될 수 있다.
악성코드 분석(Malware Analysis)은 악성코드의 구조와 기능, 동작 방식 등을 조사하는 작업이다.
분석 방식은 크게 정적 분석과 동적 분석으로 구분할 수 있다.
동적 분석(Dynamic Analysis)은 통제된 환경에서 악성코드를 실제로 실행해 동작을 관찰하는 방식이다.
다음과 같은 행동을 분석할 수 있다.
- 생성·변경되는 파일
- 실행 프로세스
- 레지스트리 변경
- 네트워크 통신
- 생성되는 서비스
- 외부 서버 접속
- 추가 파일 다운로드
일반적으로 실제 업무 시스템이 아닌 격리된 샌드박스 환경에서 분석한다.
공격자는 악성코드 분석과 탐지를 어렵게 하기 위해 난독화를 사용할 수 있다.
대표적인 방법에는 다음과 같은 것들이 있다.
- 문자열 암호화
- 코드 난독화
- 패킹
- 실행 시 코드 복호화
- 분석도구 탐지
- 가상환경 탐지
악성코드가 분석 환경임을 감지하면 악성 행위를 수행하지 않도록 만들어진 경우도 있다.
악성코드 탐지에는 여러 방법이 사용된다.
알려진 악성코드의 파일 패턴이나 특징을 이용해 탐지한다.
기존에 알려진 악성코드를 빠르고 정확하게 탐지할 수 있지만 새로운 변종이나 알려지지 않은 악성코드 탐지에는 한계가 있다.
알려진 악성 파일의 MD5, SHA-1, SHA-256 등의 해시값을 비교한다.
정확한 파일을 식별하기에는 유용하지만 파일이 조금만 변경되어도 일반적인 암호학적 해시값이 달라지는 한계가 있다.
파일 자체보다 실행 과정에서 나타나는 행동을 분석한다.
예를 들어 비정상적인 프로세스 생성, 자격증명 접근, 외부 서버 통신 등의 행동을 이용해 악성 활동을 탐지할 수 있다.
EDR 등의 보안제품에서 널리 활용된다.
악성코드가 발견되면 단순히 해당 파일을 삭제하는 것만으로 대응을 끝내서는 안 된다.
악성코드가 이미 다른 프로그램을 설치하거나 계정을 탈취했을 수 있고 공격자가 다른 지속성 수단을 확보했을 수도 있기 때문이다.
일반적인 대응 과정에서는 다음과 같은 사항을 확인한다.
- 감염 시스템 격리
- 악성 프로세스 및 파일 확인
- 최초 감염 경로 조사
- 추가 악성코드 존재 여부 조사
- 지속성 확보 여부 확인
- 계정 및 인증정보 탈취 여부 확인
- 외부 통신 분석
- 다른 시스템의 동일 IOC 검색
- 취약점 및 보안 설정 개선
- 필요한 경우 시스템 재구축
시스템에서 공격 도구가 발견됐다고 해서 반드시 그 프로그램 자체가 악성코드인 것은 아니다.
침투 테스트나 시스템 관리에 사용되는 정상적인 프로그램도 공격자가 악용할 수 있다.
따라서 프로그램의 성격뿐 아니라 설치 경위, 실행 주체, 목적, 실행된 명령과 주변의 침해 흔적 등을 함께 분석해야 한다.