보안 / 윈도우

윈도우 10에서 루트킷을 찾아 차단하고 제거하는 방법

Susan Bradley | CSO 2019.02.19
공격자들은 루트킷(rootkits)을 이용해 디바이스에 악성코드를 숨겨 오랫동안 발견되지 못하도록 한다. 이 기간 데이터나 리소스를 훔치거나 커뮤니케이션을 감시할 수 있다. 운영체제 기반 루트킷도 두렵지만 펌웨어 루트킷은 더하다. 둘 다 이를 박멸하는 프로세스와 절차를 피해 숨는다. 

커널 또는 운영체제 루트킷은 수 년 동안 컴퓨터에 대한 위험한 위협이었다. 그리고 마이크로소프트가 2006년 마이크로소프트 비스타로 운영체제를 대대적으로 변경했다. 업체들에게 디지털 서명된 드라이버를 요구했는데, 이로 인해 프린터 드라이버에만 문제가 발생했을 뿐 아니라, 악성코드 작성자들도 공격 방식을 바꾸어야 했다.

KPP(Kernel Patch PRotection) 때문에 악성코드 작성자는 디지털 서명 요건을 극복해야 했다. 그래서 고급 공격자들 또한 페이로드의 일환으로 루트킷을 사용하게 됐다. 루트킷은 집중적으로 사용되다가 수 년 동안 악성코드 결과물에서 차지하는 비율이 1% 미만이 되었다.
 

윈도우 루트킷을 재조명하게 된 Zacinlo 광고 사기

그리고 2018년 6월 Zacinlo 광고 사기 활동이 재조명되면서 우리는 다시 루트킷의 위험에 대해 걱정하게 됐다. 비트디펜더의 조사에서 밝혔듯, 이 루트킷 기반 악성코드는 6년 동안 사용되었지만 최근에서야 윈도우 10을 표적으로 삼게됐으며, 한 가지 중대한 변화를 거쳤다. 디지털 서명한 드라이버를 이용해 윈도우 10의 보호 장치를 우회한 것이다. 연구원들은 샘플 중 90%가 윈도우 10을 구동하고 있음을 발견했다.

기본적으로 루트킷은 기본적인 운영체제 청소 작업을 견디게 설계되고, 서명된 윈도우 10 드라이버에 주입되는데, 이것이 Zacinlo 악성 코드의 기능과 동일하다. 비트디펜더가 밝힌 Zacinlo의 구성요소는 다음과 같다.

• 스스로를 보호하는 루트킷 드라이버와 기타 구성 요소. 애드웨어의 정지나 삭제를 방지하면서 그 기능에 위험하다고 간주되는 프로세스를 정지할 수 있다.

• SSL 통신을 가로채고 복호화하는 MITB(Man In The Browser) 기능. 이를 통해 애드웨어는 사용자 정의 자바스크립트 코드를 사용자가 방문하는 웹 페이지에 주입할 수 있다.

Zacinlo의 루트킷 구성 요소는 구성 자유도가 높고 윈도우 레지스트리 안에 모든 구성 데이터를 암호화해 보관한다고 비트디펜더가 밝혔다. 윈도우 종료 중 루트킷은 스스로 메모리에서 디스크로 옮겨가며 이름을 바꾸고 레지스트리 키를 업데이트한다. 이런 식으로 일반적인 안티바이러스 기법을 통한 감지를 회피한다.
 

윈도우 10에서 루트킷 악성코드를 감지하는 방법

기기가 루트킷에 감염되었는지 판단하는 가장 좋은 방법은 잠재적으로 영향을 받는 장치의 발신 TCP/IP 패킷을 검토하는 것이다. 단독형 출구 필터링 방화벽이 적용된 대형 네트워크의 경우 재량으로 사용할 수 있는 키 툴이 있다. 이 방화벽을 통해 네트워크의 출구 패킷으로 워크스테이션과 네트워크 장치가 정확히 무엇에 연결되어 있는지 파악할 수 있다.

가장 중요한 목적은 방화벽의 보고를 검토하고 공격 시에 확인해야 할 것을 보여주는지 파악하는 것이다. 방화벽 로그에 IP 주소만 표시된다면 추적이 더 쉽도록 사용자 인증 데이터를 추가한다.
 
ⓒ 현재 방화벽 로깅 보고서를 검토한다. ⓒ MICROSOFT

이례적인 트래픽에 대해 경고하거나 지리적 위치에서 방화벽 트래픽을 차단할 수 있는 로깅 솔루션을 확보하는 것이 이상적이다. 공격자는 조용히 자신의 활동을 숨기기 때문에 형식적인 LM(Log Management) 및 SIEM(Security Information and Event Management) 시스템의 도입을 고려해야 할 수도 있다. 방화벽과 이벤트 로그 파일이 시스템에서 빠르게 사라지는 경우가 많기 때문에 포렌식 조사를 수행하거나 규정을 준수하기 위해 로깅을 위한 스토리지 매커니즘을 도입해야 할 수도 있다.

가정 또는 소기업 환경에서는 이런 장치가 있는 경우 ISP 모뎀의 방화벽 로그 또는 개인용 방화벽/라우터에서 트래픽을 확인할 수 있는지 확인하자. 트래픽을 필터링 및 분류할 수 있는 데이터베이스 파서(parser) 프로그램으로 로그 파일을 내보내기 한다.

최소한 시스템의 오작동은 루트킷이 설치되었다는 주요 지표가 될 수 있다. 과도한 CPU 또는 인터넷 대역폭 사용은 감염의 징조인 경우가 많다. 윈도우 10 기기는 윈도우 업데이트와 텔레메트리로 전송되는 패킷이 필요한 선순위 운영체제보다 인터넷 활동이 더 많을 수 있지만, 기기가 정상적으로 작동하지 않을 때를 판단할 수는 있다.

라우터가 시스템의 활동에 대한 조언을 제대로 제공하지 않는 경우에는 업그레이드가 필요하다. 일부 개인용 라우터에는 취약성을 스캔하고 장치가 다른 인터넷 주소를 호출할 때 확인할 수 있는 구독 서비스가 포함되어 있다. 이제 라우터에 로그인해 로그 기능 그리고 조정 및 사용자 정의가 가능한지 여부를 확인한다.
 
ⓒ 넷기어 라우터의 로깅 사용자 지정 옵션 ⓒ NETGEAR


루트킷 악성코드 공격을 방지하는 방법

루트킷 악성코드가 시스템에 설치되지 않도록 차단하는 방법은 여러 가지다. 그 중 하나는 엄격한 드라이버 서명 요건을 수립하는 것이다. 윈도우 S(Windows S) 모드는 실제로 윈도우 스토어 애플리케이션이 발행한 신뢰할 수 있는 바이너리만 컴퓨터에 설치되도록 한다. 윈도우 엔터프라이즈 라이선스로 윈도우 디펜더 디바이스 가드(Windows Defender Device Guard)를 활성화하는 것도 추가적인 보호책을 수립하는 좋은 방법이다.

최종 사용자가 기기에 루트킷이 존재한다고 생각하는 경우 IT 지원 혹은 보안 팀에 알려 적절히 조사할 수 있도록 프로세스를 주입한다. 잘 아는 사용자가 기기의 감염 여부를 판단하는 열쇠가 되는 경우가 많다. 자신이 IT 관리자라면 사용자들이 루트킷 증상을 찾아 보고하도록 교육한다.

심지어 기본적인 보안 인식 교육도 루트킷을 방지하는 데 도움이 된다. 데스크톱 및 노트북의 악성코드 사고 처리에 대한 NIST 가이드에는 다음의 IT 정책이 시스템 보호의 핵심으로 열거되어 있다.

• 의심스러운 이메일이나 이메일 첨부파일을 열거나, 모르거나 아는 사람이 보낸 하이퍼링크를 클릭하거나 악성 콘텐츠가 포함되어 있을 가능성이 있는 웹사이트를 방문하지 않는다.

• 의심스러운 웹 브라우저 팝업 창을 클릭하지 않는다.

• 악성코드와 관련되어 있을 가능성이 높은 파일 확장자(.bat, .com, .exe, .pif, .vbs 등)가 있는 파일을 열지 않는다.

• 악성코드 보안 제어 매커니즘(안티바이러스 소프트웨어, 콘텐츠 필터링 소프트웨어, 평가 소프트웨어, 개인용 방화벽 등)을 비활성화하지 않는다.

• 일반 호스트 작업에 관리자 수준 계정을 사용하지 않는다.

• 신뢰할 수 없는 출처의 애플리케이션을 다운로드하거나 실행하지 않는다.
 

루트킷 악성코드 제거 방법

루트킷을 제거하는 방법은 여러 가지다. 윈도우 10 내부에서 윈도우 디펜더 오프라인 스캔을 실행할 수 있다. ‘Windows Defender 보안 센터 > 고급 스캔’으로 이동한 후 상자에 체크표시해 윈도우 디펜더 오프라인 스캔을 활성화한다. 시스템을 재부팅하면 윈도우 PE 클린 부팅으로 운영체제를 부팅한 후 하드 드라이브를 스캔한다.
 
ⓒ IDG


맬웨어바이트(MalwareBytes)와 카스퍼스키(Kaspersky) 등이 제공하는 추가 툴도 유사한 작업을 수행한다. 스캔을 통해 루트킷 감염 의심이 확인되면 보안 사고로 보고 의심스러운 장치를 네트워크와 인터넷에서 즉시 분리한다.

시스템에 루트킷이 있는지 아직도 확실하지 않다면 여러 유용한 포럼을 통해 분석 및 탐지 과정을 수행할 수 있다. 블리핑컴퓨터(BleepingComputer) 포럼에서 시스템 평가에 대한 도움을 받을 수 있으며, 윈도우 10 컴퓨터의 경우 텐포럼(TenForums) 사이트도 유용하다.

시스템이 감염되었다고 판단되면 원본 소프트웨어를 이용해 컴퓨터를 완전히 재설치한다. 또는 전체 백업이 있는 경우 시스템을 이벤트가 발생하기 이전의 상태로 롤백하고 시스템의 재감염 조짐을 모니터링한다. 정리 과정의 일환으로 시스템의 비밀번호를 재설정하고 관리자 암호도 변경한다. 
 

다른 접근 방식이 필요한 펌웨어 루트킷

펌웨어에 내장된 루트킷은 복구 방식으로 정리하기가 어려울 수 있다. UEFI(Unified Extensible Firmware Interface) 루트킷이 가장 무섭다. 2018년 9월 APT28이라는 UEFI 루트킷이 최초로 발견됐다. 이 루트킷은 장치의 SPI(Serial Peripheral Interface)의 플래시 메모리에 내장되어 있었다. 이 덕분에 루트킷은 운영체제 재설치와 하드 드라이브 교체에도 불구하고 여전히 남아 있을 수 있었다.

BIOS, UEFI, 기타 펌웨어 루트킷으로부터 스스로를 보호하려면 시스템의 펌웨어가 최신 상태인지 확인한다. 시스템이 보안 부팅을 사용하고 있는지 확인한다. 보안 부팅은 수 년 동안 사용되었으며, 이 프로세스 중 신뢰할 수 있는 코드만 실행되도록 함으로써 사전 부팅 시스템을 보호하도록 고안되었다. 윈도우 10 시스템이 현재 보안 부팅 상태로 구동하고 있는지 확인하려면 시작 메뉴를 열고 ‘시스템 정보’를 입력한다. 결과창에서 아래로 스크롤해 ‘보안 부팅 상태’를 찾는다. 여기에서 확인되면 시스템이 이미 이 보호 모드로 작동하고 있는 것이다.
 
보안 부팅 상태 확인 ⓒ MICROSOFT

깃허브(GitHub)에는 펌웨어가 최신인지 확인하는데 도움이 되는 많은 리소스가 나열되어 있다. 시스템 BIOS와 펌웨어 업데이트를 컴퓨터 보안 프로세스에 포함시킨다. 하드웨어 업체가 BIOS 업데이트를 자동으로 확인해 설치하기 위해 제공한 툴이 없는 경우 설치하는 것이 좋다.

루트킷은 윈도우 장치에만 해당하는 이야기가 아니다. 사물인터넷 장치에도 적용될 수 있다. 장치가 감염되었다고 의심되는 경우 출고 당시로 되돌리는 ‘팩토리 리셋’을 한 후 최신 펌웨어를 설치한다. 마지막으로 사용자 이름과 관련된 비밀번호 또는 장치와 관련된 계정을 재설정한다.

루트킷에 영향을 받은 경우 복구하는 가장 좋은 방법은 운영체제를 재설치하고 펌웨어를 설치 또는 재설치하는 것이다. 필요에 따라 계정의 비밀번호를 재설정한다. 치료하는 것보다 예방이 쉬운 것은 사실이지만 운영체제와 애플리케이션을 다시 설치할 능력만 있다면 복구가 가능하다.

이제 재 윈도우 10 ISO를 플래시 드라이브에 다운로드해 저장하고 주요 애플리케이션과 설치 코드가 감염이 발생해도 접근할 수 있는 외부에 백업되어 있거나 저장되어 있는지 확인한다. editor@itworld.co.kr
 

회사명 : 한국IDG | 제호: ITWorld | 주소 : 서울시 중구 세종대로 23, 4층 우)04512
| 등록번호 : 서울 아00743 등록발행일자 : 2009년 01월 19일

발행인 : 박형미 | 편집인 : 박재곤 | 청소년보호책임자 : 한정규
| 사업자 등록번호 : 214-87-22467 Tel : 02-558-6950

Copyright © 2024 International Data Group. All rights reserved.