래터럴 무브먼트, 정상과 악성의 경계를 너머 대응하라
기업을 표적으로 지속적으로 공격을 시도하여 마침내 내부 인프라로 유입, 중요 정보를 탈취하는 등의 지능형 위협은 알려지지 않았을 뿐, 지금 이 순간에도 곳곳에서 발생하고 있다. 지능형 위협은 대개 최소 수개월에서 수 년에 걸쳐 집요하게 진행되며, 특히 내부망을 통해 전개되기 때문에 최초 유입된 시스템과 최종적으로 피해가 발생한 시스템이 전혀 다른 경우가 많다. 따라서 침해사고 시 정확한 피해를 파악하고 재침해를 방지하기 위해서는 래터럴 무브먼트(Lateral movement, 내부망 이동)를 역추적할 수 있는 방안이 필요하다.
이 글에서는 최근 주목받고 있는 래터럴 무브먼트의 개념과 공격 방법, 대응 방안에 대해 소개한다.
래터럴 무브먼트(Lateral Movement)는 직역하자면 ‘횡적 이동’이지만 ‘내부 이동’, ‘내부 확산’ 등으로 이해할 수 있다. 래터럴 무브먼트를 횡적 이동으로 제한한다면 ‘종적 이동(Vertical Movement)’의 개념도 존재할 수 있다. 동일 선상에서의 이동, 예를 들면 클라이언트 대 클라이언트(Client to Client), 서버 대 서버(Server to Server) 등은 횡적 이동이라 할 수 있고, 클라이언트에서 서버로(Client to Server), 서버에서 클라이언트로(Sever to Client)의 이동은 종적 이동이라 부를 수 있다. 이 글에서는 래터럴 무브먼트를 좀더 범용적인 의미인 ‘내부망 이동’ 정도의 개념으로 설명하고자 한다.
간단히 정의하면 래터럴 무브먼트는 지능형 위협(Advanced Persistent Threat, 이하 APT) 공격 과정 중 공격자가 조직 내 최초 시스템 해킹에 성공 후 내부망에서 사용되는 계정 정보를 획득하여 내부망의 시스템으로 이동하는 방식을 의미한다. 공격자는 왜 래터럴 무브먼트를 해야 할까? 그 이유는 아이러니하게도 기업의 보안에 대한 인식과 대응 수준이 높아지면서 경계 보안이 강화되었기 때문이다. 이로 인해 공격자가 특정 조직을 목표로 삼더라도 특정
시스템을 직접적으로 단번에 뚫고 들어갈 수 있는 가능성은 점점 낮아지고 있다. 따라서 일반 사용자들이 이용하는 클라이언트 시스템으로 내부 진입 벡터(vector)를 변경했다. 사용자 시스템을 먼저 해킹한 후 공격자가 원하는 데이터가 보관되어 있는 내부의 다른 시스템을 찾아 내부에서 내부로의 이동이 필요하게 된 것이다.
수년 전부터 APT 공격의 위험성은 지속되고 공격 규모는 점점 커지고 있다. 일부 공격 그룹은 국가의 지원을 받는 것으로 알려져 있다. 명확하게 그 수를 셀 수는 없으나 현재까지 공개된 정보들만 종합해 보더라도 200개 이상의 공격 그룹이 활동하고 있는 것으로 파악된다. 공격자들의 목적은 기밀 자료, 개인 정보, 게임 머니, 암호 화폐 등의 정보나 자산을 약탈하는 것뿐만 아니라 침해 사실 공개, 서비스거부(DoS), 랜섬웨어 등의 협박을 통해 금전적 이득을 얻고자 하는 것이 대부분이다.
외부에서 내부로 침입하기
APT 공격 단계를 설명하는 다양한 모델이 있지만, 용어나 단계 등에 일부 차이가 있을 뿐 큰 관점에서 보면 대동소이하다. APT 공격의 일반적인 과정은 [그림 1]과 같다.
APT 공격 단계는 외부에서 내부로 이동하는 것과 내부에서 내부로 이동하는 것으로 크게 두 부분으로 나눌 수 있다.
외부에서 내부로 이동하는 부분에 대해 먼저 살펴보자. 공격자는 특정 조직을 타겟으로 선정하고 해당 조직에 대한 다양한 정보를 수집한다. 타겟 조직의 인프라에 대한 정보를 파악하는 것도 포함되며, 수집된 정보를 활용해 타겟 조직을 공격하기 위한 도구를 준비한다. 이때 타겟 조직에서 사용하는 보안 제품에 탐지되지 않기 위해 미리 안티바이러스(Anti-Virus) 탐지 테스트를 수행하기도 한다.
외부로부터의 내부 접근이 단단하게 보호되고 있는 환경에서 공격자가 조직을 침해하기 위해 선택할 수 있는 옵션은 그다지 많지는 않다. 그 중 현재까지도 침해 성공률이 좋고 타깃 공격이 가능한 공격 방법은 단연 스피어 피싱(Spear Phishing)과 워터링 홀(Watering Hole) 공격이다. 간단히 정리하면 익스플로잇(Exploit) 코드가 메일의 첨부파일에 포함되어 있다면 스피어 피싱, 웹사이트에 심어져 있고 링크를 전달하거나 피해자가 자주 방문하는 웹 사이트를 변조한다면 워터링 홀 정도로 이해하면 된다. 실제 공격에는 이 두 가지 방법이 혼용되기도 한다. 이때 주로 이용되는 소프트웨어는 마이크로소프트 오피스(Microsoft Office), 윈도우(Windows), 어도비 플래시 플레이어(Adobe Flash Player), 어도비 아크로뱃 리더(Adobe Acrobat Reader) 등이다. 이 방법들은 외부에서 내부를 공격하는 것으로, 클라이언트 단말기를 노린 공격이다.
공격자는 사용자 PC를 공격해야 하므로 당연히 사용자 PC에서 많이 사용되는 소프트웨어를 노리게 된다. 이때 소프트웨어 취약점을 이용하는 익스플로잇 코드가 동작에 성공하게 되면 외부에 있는 공격자의 C&C(Command & Control) 서버와 접속이 이루어진다. 이로써 공격자는 타겟 조직의 네트워크에 존재하는 클라이언트 단말기를 직접 제어할 수 있게 된다. 즉, 외부에서 내부로 이동한 것이다.
내부에서 내부로 이동하기
공격자가 내부망에 존재하는 시스템의 제어권을 얻게 되었다면 원하는 목적을 이룰 때까지 최대한 은밀하게 움직여야 하며, 이 기간은 상당히 길어질 수도 있다. 하지만 내부망에 들어온 이상 내부 네트워크를 통해 다른 시스템에 접근하는 것은 상대적으로 자유로운 편이다. 대부분의 보안 장비들은 외부에서 내부로 진입하는 곳에 집중되어 있기 때문이다. 내부망 이동 시 최근 공격자들이 주로 사용하는 방법은 시스템에 접근을 위해서 인증 정보(Credential, 이하 크레덴셜)를 훔친 후 이를 이용해 내부망의 다른 시스템으로 이동하는 것이다. 훔친 인증 정보가 해시(Hash) 형태인 경우 이를 ‘패스 더 해시(Pass-the-Hash)’ 공격이라고 부르기도한다. 크레덴셜을 훔치기 위한 도구는 다양한데 그 중 미미캐츠(Mimikatz)라 불리는 도구가 가장 많이 사용된다. 미미캐츠는 SAM 레지스트리 혹은 메모리에서 윈도우 계정 정보를 덤프(Dump)할 수 있다.
공격자가 평문 형태 또는 해시 형태의 크레덴셜을 획득한 이후에는 이를 이용하여 해당 사용자처럼 다른 시스템에 접근할 수 있다. 이때 가장 많이 사용되는 도구는 PsExec, 파워쉘(PowerShell), RDP 등이다.
최근에는 특히 파워쉘을 이용한 공격이 많이 사용되고 있다. 대부분의 윈도우 시스템에는 파워쉘이 기본적으로 설치돼 있으며, 강력한 시스템 제어 기능을 제공하므로, 관리자 뿐만 아니라 공격자에게도 매우 각광받고 있는 추세다. 몇 년 전부터 파워쉘을 이용하여 내부 침해 후의 과정을 제어할 수 있는 프레임워크들이 많이 공개되어 왔다. 이러한 공개된 프레임워크들로는 파워스플로잇(Powersploit), 니샹(Nishang), 엠파이어(Empire), 퍼피(Pupy) 등이 있다.
[그림 6] 엠파이어(Empire)를 활용한 침해 시연
침해사고의 인지
이러한 APT 유형의 침해가 발생했다고 가정했을 때 이를 인지하는 방법이 몇 가지 있다. 조직 내의 시스템에서 이상한 파일이 발견되거나 DB 변경, 비정상 접속 등의 이상 증상이 발견되기도 하고, 좀더 심각하게는 시스템이나 네트워크에서 장애가 발생되기도 한다. 또는 안티바이러스 제품에서 악성코드가 탐지되는 등 보안 제품이나 서비스 등에 의해 위협이 탐지되기도 한다. 이와 반대로 외부로부터 침해 사실을 인지하게 되는 경우도 있다. 외부 기관으로부터 침해 사실을 전달받거나, 인터넷 상에 노출되어 돌아다니는 회사의 기밀자료를 확인하게 될 수도 있다. 또는 랜섬웨어 감염처럼 공격자로부터 직접적인 협박을 받을 수도 있다.
조직들은 이러한 내•외부의 정보를 통해서 침해 사실을 인지하게 되는데, 안타깝게도 대부분의 조직에서 침해를 인지하는데 걸리는 시간은 평균 170일 이상이 소요된다. 이는 국제 평균 수치이며, 한국을 포함한 아시아권의 경우는 훨씬 오랜 시간이 걸리는 것으로 알려져 있다. 안랩 포렌식 전담조직(A-FIRST)의 분석 사례 중에는 대기업임에도 불구하고 2년이 지나도록 인지하지 못한 경우도 있었다. 이 정도로 시간이 경과되면 이미 공격자는 공격 목적을 모두 달성했다고 볼 수 있다.
이렇게 침해사고의 인지가 늦어지는 데에는 몇 가지 이유가 있다. 첫째, 조직 내부에서 침해 인지를 위한 활동(위협 사냥, Threat Hunting)을 하지 않는 것이다. 둘째, 악성코드 탐지 시 원인 파악 없이 안티바이러스에 의한 치료나 시스템 포맷 등의 단순 대응에 그친다는 것이다. 셋째, 공격자가 내부망 침해 시 악성코드 사용을 줄이고 정상 프로그램인 LOLBins를 많이 활용했다는 것이다.
LOLBins는 Living Off the Land Binaries의 약자로, ‘자급자족’의 의미를 가지고 있다. 이 용어는 2013년경부터 언급되기 시작한 용어로 ‘lolbins’를 검색하면 다양한 정보들을 얻을 수 있다. LOLBins는 시스템에 설치된 정상 프로그램들이 공격자의 목적을 위해 사용되는 것을 의미한다. 이 파일들은 대부분 관리 목적의 프로그램들로, 프로그램 실행, 다운로드, 서비스 변경, 레지스트리 조회 및 변경, ADS 활용, 스크립트 실행 등 다양한 목적으로 사용할 수 있다. 이 프로그램은 시스템에 존재하는 정상 프로그램이므로 안티바이러스 제품이 악성 파일로 인지하지 않는다.
래터럴 무브먼트, 추적이 어려운 이유
앞서 설명했듯이 APT 유형의 침해사고는 인지하기도 쉽지 않지만, 래터럴 무브먼트 과정이 포함된 침해사고를 분석하는 것도 마찬가지로 쉽지 않다. 그 이유는 다음과 같다.
• 로그 부족
• 공격자의 의도적 흔적 삭제
• 늦은 침해사고 인지
• 식별의 어려움
래터럴 무브먼트 행위, 특히 클라이언트 PC 간의 이동은 로그가 많이 남지 않는다. 게다가 공격자들은 이 마저도 의도적으로 삭제한다. 최근 사용이 증가하고 있는 SSD 스토리지 또한 삭제된 파일의 복구를 어렵게 하므로 삭제를 이용한 안티포렌식 행위는 공격자 입장에서 매우 유용하다. 또한 앞서 언급했듯이 침해사고를 뒤늦게 인지하는 것도 추적을 어렵게 하는 원인이기도 하다. 시간이 흐를수록 시스템에 남아있는 흔적이 소멸되기 때문이다. 이것이 보다 신속하게 침해사고를 인지해야하는 이유이기도 하다. 또다른 이유는 흔적이 남아있더라도 식별이 어렵다는데 있다. 시스템 간의 사용자 계정을 이용한 인증 및 통신 행위는 정상 행위인지 악성 행위인지 구분하기가 매우 어렵다.
침해사고 분석은 흔적을 이용해서 공격자의 행위를 역추적하는 것이다. 하지만 위와 같은 이유로 최근에는 흔적만으로는 공격자의 행위를 원활히 추적하기가 어려워지고 있다. 따라서 흔적이 소실되지 않도록 잘 남기는 것이 매우 중요하다. 이제 래터럴 무브먼트를 대응하기 위한 방법에 대해 살펴보자.
래터럴 무브먼트, 사전에 막을 수 있는가?
래터럴 무브먼트는 인증 정보, 네트워크, 서비스 요소 중 하나라도 충족되지 않으면 성공할 수 없다. 즉, 내부 네트워크의 시스템과 서비스에 접근할 수 있는 계정을 노출시키지 않거나, 네트워크 수준에서 차단하거나, 시스템에서 해당 서비스를 제공하지 않도록 한다면 래터럴 무브먼트 행위가 발생하지 않도록 할 수 있다.
우선 크레덴셜을 보호하는 방법을 알아보자. 기본적으로는 각 사용자가 자신의 계정 정보 보관에 유의해야 한다. 계정 및 패스워드를 평문 파일로 저장해 두거나, 이메일이나 메신저를 통해서 주고 받는 행위를 해서는 안된다. 보안 운영 부서에서는 각 시스템들이 비밀번호를 안전하게 운영할 수 있도록 복잡도, 주기적 변경, 동일 비밀번호 재사용 금지 등의 비밀번호 관리 정책을 운영해야한다. 시스템 수가 많지 않은 조직에서는 관리자(Administrator) 계정을 관리 용도로 사용하는 경우 모든 시스템에 동일 비밀번호를 사용하는 사례가 많은데, 한 대의 시스템에서 관리자 계정이 탈취되는 경우 전사 시스템이 위험에 빠지게 된다.
이와 마찬가지로 액티브 디렉터리(Active Directory)를 사용하는 조직에서도 주의해야 할 사항이 있다. 관리자 권한의 액티브 디렉터리 계정을 이용하여 다른 시스템에 접근한 경우 미미캐츠와 같은 도구들은 시스템간 인증 후에 메모리상에 캐싱되어 남아있는 크레덴셜을 노린다. 따라서 크레덴셜의 캐싱의 수를 최소화 하도록 설정하거나, LSASS 메모리내에 평문 비밀번호가 저장되지 않도록 해야 한다. 이를 위한 설정 방법은 다음과 같다.
• HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon 레지스트리 키의 CachedLogonsCount를 0 또는 1로 설정
• HKLM\SYSTEM\CurrentControlSet/Control/SecurityProviders/Wdigest 레지스트리 키의 UseLogonCredential를 0으로 설정 (KB2871997 패치 후 레지스트리 수정)
또한 관리자 권한을 가진 계정 등으로 다른 시스템에 접속한 후에는 해당 시스템을 반드시 재부팅 해야 한다.
네트워크 관점에서는 조직 내에서 정말 중요한 시스템은 네트워크를 분리해 운영하는 것이 바람직하다. 부서별, 용도별로 최소 단위로 네트워크를 분리해서 구성해야 한다. 네트워크 전체가 연결된 경우에는 단 한 사람의 실수로 인해 조직 전체가 위험에 처할 수 있다.
각 시스템은 필요한 서비스만 활성화하여 사용해야 한다. 특히 파일 공유 기능이나, WMI, RDP 기능 등을 사용하지 않는다면 각 시스템의 서비스를 비활성화 하고, 해당 서비스들이 사용하는 포트(TCP 135, 445, 139, 3389, 49154)는 차단하는 등의 조치가 필요하다.
래터럴 무브먼트, 발생 후에 인지할 수 있는가?
앞서 언급했듯이 래터럴 무브먼트의 행위는 정상 사용자의 행위와 크게 다르지 않다. 따라서 악성 파일이나 악성 행위를 탐지해내는 보안 제품으로는 탐지가 어렵다. 이를 인지할 수 있는 몇 가지 방안을 제시한다면 다음과 같다.
첫째, 조직 내에 허니팟 시스템 혹은 계정을 이용하는 것이다. 이를 모니터링하고 있다가 공격자에 의해 허니팟 시스템에 접근이 발생하거나, 허니팟 계정이 사용되는 경우 침해로 인지하는 방식이다. 공격자는 제대로 관리가 되지 않는 유휴 시스템을 노리는 경우가 많다. 역으로 조직 내에서 남아있는 유휴 시스템들을 이런 용도로 활용할 수도 있다.
둘째, 머신러닝 기술을 이용하여 정상 프로그램의 이상 실행 여부를 탐지하는 것이다. 래터럴 무브먼트에 사용되는 프로그램의 실행 패턴 혹은 네트워크 접근 이력을 보고, 정상 임계치를 벗어난 이상 행위 발생 시 침해 여부를 판단하는 방식이다. 이는 물론 조직마다 정상과 이상의 범위가 다르므로 조직마다 훈련된 시스템이 필요할 것이다. 일본 침해사고대응센터(JP-CERT)에서는 이와 같은 접근 방식으로 래터럴 무브먼트를 탐지해낸 사례를 발표하기도 했다.
셋째, 최근 웹 사이트에서 많이 적용되어 있는 방식을 이용하는 것이다. 이를테면 인증 시 당사자에게 문자 혹은 메일을 발송함으로써 인증 발생이 정상 사용자에 의해 발생한 것인지 당사자에게 확인하는 방법이다.
래터럴 무브먼트, 사후에 추적할 수 있는가?
래터럴 무브먼트를 추적하기 위해서는 충분한 흔적이 남아있어야 하는데, 대부분은 그렇지 못하다. 따라서 엔드포인트 시스템의 로그 수집 및 관리 방안을 강화하는 것이 필요하다. 구체적으로 설명하면, 로그의 저장 기간은 2년 이상 남을 수 있도록 설정하고 부득이한 경우라 하더라도 최소한 6개월을 남기도록 해야한다. 또한 해당 로그는 별도 시스템에 보관하여 공격자에 의해 삭제되지 않도록 해야 한다.
래터럴 무브먼트를 추적하는데 필요한 로그는 윈도우에서 기본적으로 제공하는 Security.evtx 다. 이 로그에는 시스템에서 인증 발생 시 로그가 남게 되기 때문이다. 또한 프로그램 실행과 네트워크 접속 로깅 등이 필요한데, 이는 마이크로소프로 인수된 시스인터널즈(Sysinternals)에서 무료로 제공하는 시스몬(Sysmon) 툴을 이용하여 쉽게 로깅할 수 있다. 또한 파워쉘의 경우 4.0버전부터 지원되는 파워쉘 스크립트 블록 로깅 켜기 기능을 활용하면 시스템에서 실행되는 파워쉘 스크립트를 확보할 수 있다. 최근에는 엔드포인트의 행위 정보를 수집하는 EDR 솔루션이 많이 등장하고 있어, 이런 솔루션의 도움을 받을 수도 있다.
APT 공격의 특성상 침해를 100% 차단할 수는 없다. 공격자가 조직의 사용자 PC를 침해하는 데 성공한 이후에는 내부망에서 사용되는 계정 정보들을 획득하려 할 것이며, 이를 통해 내부망을 이리저리 둘러보게 된다. 이때 공격자는 악성코드 대신 정상 프로그램(LOLBins)을 사용하므로 관리자에게 적발되기 어렵다.
따라서 운영자는 외부자에 의한 위협이 아닌, 이미 계정을 알고 있는 내부 사용자를 공격자라고 가정하고 내부 보안 정책들을 검토해야 한다. 특히 최근의 환경에서는 엔드포인트의 침해 이후에 내부망을 이동하는 방식이 주로 사용되므로 엔드포인트에서 발생하는 행위를 잘 관찰하고, 위협 사냥(Threat Hunting) 활동을 적극적으로 수행해야 할 것이다.
- AhnLab분석연구팀 이명수 책임연구원