Workshop - 보안
상태바
Workshop - 보안
  • 승인 2005.01.25 00:00
  • 댓글 0
이 기사를 공유합니다

“어떤 것이든 반드시 신속하게 대응해야 한다”

경계선에서 트래픽 관찰해야 … 청소 후 완전 재설치가 바람직

네트워크의 규모가 어떻든 관계없이 감염된 기계는 언제나 깨끗이 청소를 해야 한다. 공격으로부터의 복구 작업은 보통 일이 아닐 수도 있지만, 다음 몇 가지 간단한 단계를 따라한다면 고통을 조금은 줄일 수 있을 것이다.

컴퓨터들 중 하나를 공격하는 침입자에서부터, 당신의 웹 트래픽이 자기 사이트를 경유해 사용자 이름과 패스워드를 캡처하도록 경로를 바꾸는 스파이웨어 조각에 이르기까지, 틈은 어떤 모양이든 어떤 크기로든 올 수 있다. 어떤 것이든 반드시 신속하게 대응해야 한다.
붉은 기, 즉 위험 신호에 조심해야 한다. 침투나 웜 감염의 한 가지 신호는 워크스테이션이나 서버가 갑자기 네트워크를 범람시키거나 비정상적으로 작동할 때다. 또 한 가지 단서는 이상하거나 삭제되지 않는 디렉토리들이 하드 드라이브에 나타났는데, 안티바이러스와 안티스파이웨어 툴들은 이들을 탐지하지 못할 때다.
우리는 트래픽을 경계선에서 관찰함으로써 어떠한 수상한 활동도 놓치지 않도록 하기를 권한다. 가끔씩 다른 조직들이 문제를 집어내는 데 도움을 줄 수도 있다. 예를 들어 자매 대학에서 문제에 대해 경보를 보내 주고, 공격을 당한 기계의 로그 조각들을 보내 줄 수도 있을 것이다.

복구 과정
일단 무언가 좋지 못하다고 결론이 나면 더 이상은 감염된 기계에 설치된 어떤 프로그램도 믿을 수가 없으며, 운영시스템 커널 또한 마찬가지다. 모든 바이너리는 교체돼야 하며, 문제 그 자체이거나 아니면 더 이상 문제의 소스를 찾을 수 없는 것으로 가정해야 한다. 조직과 공격의 본성에 의존하여 어떠한 정찰이나 복구 활동을 시도하기 이전에 담당 기관으로 전화를 먼저 해볼 것이다(잊지 말고 먼저 법률 자문을 찾으라).
지난 봄 대학에서 있었던 리눅스 사고에서는 서크IT(SuckIT)라는 루트키트가 은밀하게 설치돼 루트 액세스를 얻고 사용자 이름과 패스워드를 훔쳐갔을 뿐만 아니라, 의심받지 않는 기계를 이용해 서비스 거부 공격을 발동시켰다. 이 공격은 침입자가 일단 기계에 액세스하기만 하면 사용할 수 있는 도구가 얼마나 많은지를(루트키트, 키 로거 및 백도어 등) 여실히 보여준다. 침입자가 자신이 설치한 소프트웨어를 제거했는지, 혹은 여전히 기계에 남아 있어서 그 컴퓨터에서 어떤 수상한 일이 이뤄지고 있는지 여부를 파악하기는 힘들다. 서크IT나 울프(Wolff)와 블랙햇 공격자 툴을 이용할 경우 침입자들은 자신을 숨기고 코드를 기계 깊숙이 묻어놓을 수 있다.
악성 소프트웨어가 하나의 실행 파일 안에서 배포될 수 있다. 하나의 작은 파일(100KB 이하)은 그리 커 보이지 않겠지만 시스템 보안을 후회하는 많은 백도어를 열 수 있는 능력을 갖춘 코드를 포함하고 있을 수도 있다. 이 불량 파일을 제거하더라도 백도어가 열려 있던 동안 침입자가 어떤 다른 코드를 주입시켰는지 알 수가 없다. 키보드에서 타이핑되는 모든 키를 로깅하는 키 로거(key logger)가 백그라운드에서 돌아가고 있을 수도 있고, 아니면 다른 백도어가 산발적으로, 혹은 미래 어느 날에 실행되도록 남겨져 있을 수도 있다. 그리고 이 모든 것들은 탐지하기가 힘들다. 따라서 희생된 컴퓨터는 어떤 것이든 공격이 발견된 이후로 최소한 2주 이상 계속 모니터링을 하고, 가능한 한 빨리 재설치를 하기를 권한다.
어떤 스파이웨어 프로그램들은 메모리 안의 두 곳에 배치되는 ‘형제(brother)’ 프로세스를 사용하기도 한다. 이들은 죽일 수가 없으며, 하나를 죽인다고 해도 두 번째 프로세스가 스스로를 다른 장소에 다른 이름으로 복사한다. 이런 프로그램들도 또한 기계의 자원을 고갈시킨다.
그리고 컴퓨터에서 무엇이 대체됐는지를 알 수 있는 방법도 없다. 일부 윈도 컴퓨터에서 cmd.exe가 대체됐다고 해도 마찬가지다. 최선의 해결책은 포맷된 디스크로 항상 완벽하게 재설치를 하는 것이다. x86 환경을 사용하고 있다면 기계가 재감염되는 데 사용될 수도 있기 때문에 부트 레코드를 포맷해야 한다는 사실을 기억하라(fdisk/mbr).
완벽한 재설치를 위해서는 우선 기계 뒤에서 전원 선을 뽑아야 한다. 운영시스템은 페이지나 스왑 파일에서 디스크에 있는 메모리의 일부를 계속 차지하며, 여기에는 컴퓨터에서 돌아가는 프로그램 부분들이 포함돼 있다. 대부분의 OS는 더 이상 필요하지 않은 정보를 하드드라이브에서 느리게 삭제하며 컴퓨터를 껐을 때만(shutdown) 완전히 동기화가 된다. 생성 및 삭제된 파일이나 감추어진 트랙 등과 같은 중요한 정보는 여기서 숨겨진다. 따라서 전원을 중단(interrupting)시키면 이 정보를 계속 디스크에 유지해서 복구 및 조사용으로 이용할 수 있다.
그 다음 복구 툴을 이용해 CD-롬으로 기계를 부팅시켜라. 우리가 가장 좋아하는 것은 리눅스용으로는 놉픽스-STD(Knoppix-security Tools Distribution), 윈도용으로는 파이어(FIRE: Forensic and Incident Response Environment)다. 이들은 알려진 좋은 툴과 알려지고 손상되지 않은 커널들로 감염된 컴퓨터에 데이터를 복제할 수 있게 해주는 라이브 CD다. 수많은 유용한 정보분석 툴들이 있기 때문에 리눅스 기반 침입용으로 STD를 선호하지만, 윈도 침입에는 파이어가 보다 쉽게 도움을 줄 수 있다.
복구 환경으로 컴퓨터를 부팅시킨 후 감염된 컴퓨터의 하드드라이버의 디스크 이미지를 만들어서 저장해 두고 추후 검토에 이용하라. 여기서 표준 툴인 dd를 이용하면 아주 좋은데, 이것은 모든 하드드라이브 비트를 복사해 준다. 파티션매직(PartitionMagic)가 같이 드라이브의 ‘좋은’부분들만 복사하는 툴은 그만큼 도움이 되지 못한다.

윈도의 세계
윈도 시스템에 허가없이 삽입된 코드를 제거하는 일은 간단하다고 흔히들 생각하지만 그것은 잘못된 생각이다. 이런 코드를 제거함으로써 다른 멀웨어(malware)가 불려나올 수 있기 때문이다. 예를 들어 어떤 스파이웨어에는 설치해제 툴이 함께 있는데, 최근 복구 작업을 하다가 우리는 이것이 소위 말하는 양의 탈을 쓴 늑대같은 툴이라는 사실을 알게 됐다. 이것은 스파이웨어가 다른 곳에 스스로를 재설치하도록 한다. 또한 스파이웨어가 스스로 네트워크 스택에 삽입되도록 함으로써 이것이 제거되면 컴퓨터가 부팅되지 않거나 혹은 재설치돼게 한 적도 있었다.
netstat.exe, cmd.exe 및 dir과 같이 알려진 깨끗한 툴들이 파일 시스템에 있는지, 그리고 시스인터널(Sysinternals) 의 스트림즈(Streams), TCP뷰(TCPView) 및 프로세스 익스플로러 등의 프리웨어가 있는지를 확인하라. 시스템을 신속하게 온라인화시키는 게 목표이고 완전 재설치가 불가능하다면, 퀵 앤 더티 픽스(quick and dirty fix)가 가야 할 길이다. 하지만 이것은 위험하며, 재설치를 대신할 수는 없다.
윈도 침입에 대처할 수 있는 몇 가지 팁을 소개해 본다.

>> IP 어드레스, 하드웨어 어드레스 및 클럭 스큐(clock skew)와 같은 컴퓨터 정보를 기록해 두라.
>> 윈도 XP에 있는 시스템 복구(System Restore) 기능을 중단시켜라. 또 다른 문제의 카피를 숨기고 있을 것이다.
>> 윈도 익스플로러에서는 ‘시스템 파일 보기’와 ‘숨겨진 파일 보기’를 모두 체크해두라. 많은 교활한 실행 파일들이 스스로를 마치 시스템 파일인 것처럼 위장을 하고 있다.

모든 유틸리티들의 알려진 좋은 카피를 이용해 netstat -ano를 실행시키거나, TCP 뷰를 띄워 손상된 시스템의 네트워크 활동을 확인하라. 서비스 거부 공격이거나, 혹은 금지되야 할 포트 청취가 되고 있는 서버 유형 프로세스일 수도 있다. 예를 들어 문제가 되는 네트워크 트래픽을 찾은 다음에는 네트워크 접속과 관련된 PID(Process ID)를 기록하라.
그런 다음, 프로세스 익스플로러(Process Explorer)를 띄워라. 나쁜 네트워크 트래픽과 관련된 PID를 찾아서 파일 이름이나 이것이 있는 위치 등과 같이 프로세스에 관해 모을 수 있는 모든 정보를 모으라. 그리고 악질 프로세스를 중단시키고 네트워크의 변칙적 작동도 중단됐는지를 확인해 보라.
이제 상황은 잠시 통제 상황이 됐다. 다음 번에 시스템이 부팅될 때 어떻게 하면 공격이 띄워지지 않을지를 밝혀내라. 파일이 윈도 XP 레지스트리에서 실행될 수 있는 14곳의 장소를 수동으로 검색하거나, 혹은 오토런(Autoruns)과 같은 자동화 툴을 사용하라. 불량 파일에 연관된 엔트리는 무엇이든 그 레지스트리 키를 삭제하라.
가장 최근에 나온 윈도의 업적들 가운데 하나로 ADS (Alternate Data Streams)가 있는데, 마이크로소프트가 아주 작은 이미지들을 지정하기 위해 사용하는 것이다. 그런데 불행히도 ADS는 또한 NTFS 시스템에서 사용돼 다른 파일의 ‘설명(description)’ 부분에 데이터를 숨김으로써 공격자들의 키입력 로그와 실행 파일들이 모든 탐지 작업을 피할 수 있게 해주기도 한다. 한번은 winnt.exe 파일에 키로그 파일이 연결돼 있는 것을 본 적도 있고, FTP 서버가 C:Windows 디렉토리에 연결된 적도 있었다.
이런 종류의 파일에는 스트림즈(Streams)의 LADS나 래버소프트(Lavasoft)의 애드웨어(AdAware)와 같이 이들을 찾고 청소할 수 있게 만들어진 유틸리티를 찾아야 한다. 그리고 C:Windowssystem32etc에 있는 호스트 파일을 확인해서 그 곳에 있는 모든 엔트리들이 적법한 것인지 보라. windowsupdate.microsoft.com을 www.i-am-a-hacker.com으로 방향조정함으로써 공격자가 맛볼 재미를 생각해 보라.
가장 안전한 방법은 먼저 시스템에서 침입자를 제거하는 것이다. 유닉스와 달리 라이브 윈도 복구 환경으로 부팅할 수 있는 복구 툴은 몇 되지 않는다. 크노픽스를 사용할 수도 있지만, 이것은 윈도 레지스트리로의 액세스를 제공하지 않는다. 윈터널즈(Winternals)의 ERD커맨더(ERDCommander)라는 강력한 툴로 시스템을 부팅할 수 있지만, 이 제품의 가격은 워크스테이션용이 150달러, 서버 긴급 다운로드용이 300달러다. 또 다른 옵션은 스크류드라이버(screwdriver)를 확보하고, 하드드라이브를 감염된 시스템에서 빼낸 다음, 이것을 다른 윈도 시스템에 장착시키는 것이다.
이제 손상된 드라이브로부터 어떤 것을 실행하지만 않는다면 운영시스템을 다시 제어할 수 있게 됐다. 작업관리자와 넷스태트를 사용해서 무슨 일이 일어나고 있는지를 확인할 수가 없기 때문에, 창의력을 발휘할 필요가 있다. 마이크로소프트의 시그베리프(Sigverif) 툴을 이용하도록 해보라. 이것은 손상된 드라이브를 검사하고 서명되지 않는 파일을 어떤 것이든 조사해줌으로써 전자 서명들을 점검해준다.
파일이 눈에 보이는 것과는 다를 수도 있다는 사실을 명심하라. 예를 들어 DLL 파일은 시스템에 잠복해 있는 FTP 서버용 텍스트 구성 스크립트일 수도 있다. 레지스트리 분석용 자동 툴을 쓸 수는 없겠지만, 시스템에 있는 일군의 특정 레지스트리들을 띄워서 수동으로 이들을 점검할 수 있다. 이제 배드 파일을 삭제하고, ADS를 점검하고, 시스템 바이러스를 스캐닝하고, 스파이웨어를 가려내라.
유닉스나 리눅스에서 공격을 당했다면, 그 프로세스는 유사하긴 하지만 좀더 많은 것들이 포함돼 있다.

최소한의 방어
공격에 처했을 때 가장 먼저 할 수 있는 최선의 대응은 깨끗한 백업으로부터 컴퓨터를 재설치하는 것이다. 그러나 백업을 갖고 있지 않거나 상사로부터 재설치가 아니라 복구하라는 압박을 받을 때는 사태가 위험해질 수 있다. 대부분의 IT 조직들이 표준 이미지나 설치 방안을 사용하며, 불행히도 이로 인해 데이터 센터에 있는 모든 기계는 같은 툴에 의해 공격을 당할 위험에 처해진다.
그리고 침투당했다는 사실을 알게 되자마자 사용자들로 하여금 패스워드를 바꾸도록 해야 한다. 우리 대학에서 리눅스 공격을 당했을 때 우리는 시스템을 충실히 포맷하고 패치했다. 하지만 패스워드 변경 과정에서 우리도 모르게 사용자들이 같은 패스워드를 입력하게 버려두게 됐다. 15분이 채 지나지 않아 공격자들은 같은 패스워드로 다시 이 시스템으로 로그인을 하고 내부로부터의 시스템 공격을 감행했다. 여기서 배울 수 있는 교훈 한가지. 패스워드 히스토리를 두고 최소한 2년 간은 같은 패스워드를 다시 쓰는 일이 없도록 해야 한다.

정보분석 디스크 이미지

정보분석 디스크 이미지(forensic disk image)는 말하자면 공격 분석 보고서라고 할 수 있다. 이것은 공격이 어떻게 나타났고, 어떻게 진행되었으며, 공격자가 무엇을 숨기고 있는지를 밝혀내는 데 도움을 준다. dd를 이용해 이 이미지를 만들 수 있는데, dd는 유닉스나 크노픽스-STD 및 파이어 같은 툴에 기본 사양으로 포함돼 있다.
이 이미지는 공격이 고립되어 발생했는지 여부를 확인해준다. 다른 사건들과 공격 방안의 유사성을 파악하기 위해 만들어 놓은 디스크 이미지 카피를 확인해 보라. 지난 7월, 우리가 일하고 있던 위스콘신 매디슨 대학에서는 공격자가 몇 대의 컴퓨터에 불량 FTP 서버를 설치하고, 감염된 기계를 돌려서 탐지망을 피해갔다. 일단 우리가 한 대의 감염된 시스템을 발견하고 고치자 다른 것이 또 드러났다.
손상된 컴퓨터의 저장된 디스크 이미지를 점검함으로써, 우리는 공격자가 FTP 서버의 배너에 고유의 서명뿐만 아니라, 고유 포트도 사용했음을 발견했다. 이들은 FTP의 일반적인 지점인 포트 21이 아닌 포트 9998에 숨어 있었으며, 이로 인해 공격자는 우리 서버를 이용해 훔친 게임과 영화를 호스팅할 수 있었다.
조사에서 수상한 게 발견되지 않고, 공격이 시스템의 메모리에서만 이뤄졌다는 의심이 들 경우에는 스왑 파일을 들쳐봐서 멀웨어가 거기 있는지를 확인해 보라. 메모리 상주 공격은 탐색을 피하려 하며, 컴퓨터를 재부팅시킬 경우 공격의 증거와 공격자는 사라진다.
침입자가 시스템에서 삭제를 한 파일을 어떤 것이든 로케이팅 시키기 위해서는 이미지에 대한 파일 복구 툴을 돌려 이들을 복구해야 한다. 희생된 하드 드라이브의 dd 이미지를 다른 유닉스 박스로 가져가서 거기서 슬레유스 키트(The Sleuth Kit)를 사용하라. 이 키트의 명령어 라인 인터페이스가 불편하게 느껴지면 오토싸이(Autopsy)라는 슬레유스 키트의 GUI를 사용하면 된다.
도움을 요청하기 위해 결국 그 지역의 FBI 현장 사무소에 전화를 하게 됐다면, 요원들이 정보분석 이미지를 이용해 로그 파일의 삭제된 섹션을 검색하고 다른 코드 추적을 감행해 공격자를 추적해낼 수 있을 것이다.


댓글삭제
삭제한 댓글은 다시 복구할 수 없습니다.
그래도 삭제하시겠습니까?
댓글 0
댓글쓰기
계정을 선택하시면 로그인·계정인증을 통해
댓글을 남기실 수 있습니다.