Blog

AI와 사이버 보안: 맨디언트 컨설턴트 및 분석가들이 AI를 활용하는 방법

Trisha Alexander, Liam Smith, Ron Craft, Joseph Dobson, James Hovious, Luke McNamara
Jun 08, 2023
8 min read
|   Last updated: Jul 27, 2023
Consulting
Threat Intelligence
analysts

생성형 AI(Generative AI)의 잠재력은 어디까지 일까요? 다양한 산업계에서 생성형 AI는 비즈니스에 큰 영향을 끼치기 시작했습니다. 보안 업계도 예외는 아닙니다. 최근 몇 개월간 생성형 AI 기술은 보안 관련 뉴스의 주요 주제 중 하나였습니다. 보안 업계에서 바라보는 생성형 AI는 양날의 검입니다. 이 기술은 방어자와 공격자 모두에게 이익이 될 수 있습니다.

방어자와 공격자 모두에게 이익이 되는 양날의 검 - Generative AI

창과 방패 모두에 영향을 끼치는 생성형 AI를 실제 보안 업계에서 어떻게 활용하고 있을까요? 구글 클라우드의 경우 발 빠르게 생성형 AI 기술을 보안 스택에 도입하겠다고 발표를 하였습니다. 맨디언트 역시 적극적으로 이 기술을 탐지와 대응 활동에 접목하고 있습니다. 맨디언트는 보안 컨설턴트와 분석가들이 AI 기술을 활용해 위협을 더 빠르게 식별하고, 분석 과정의 수고스러움을 덜어 내고, 전문가들의 전문성을 더 높여 고객에게 더 나은 서비스를 제공하고자 노력하고 있습니다. 본 포스팅에서는 맨디언트 컨설팅 및 분석 팀에서 구글이 제공하는 생성형 AI 서비스인 Bard를 어떻게 이용하고 있는지 구체적인 사례를 통해 알아봅니다.

참고로 맨디언트는 고객 데이터를 Bard 프롬프트에 입력하지 않는 식으로 생성형 AI 기술을 활용하며, AI의 답변으로 나온 결과물은 구현 전에 전문가들의 철저한 검토를 거칩니다. 이를 통해 민감한 데이터가 생성형 AI 서비스의 학습을 위한 데이터 세트로 활용되는 것을 방지하는 동시에 생성형 AI의 환각같이 정확하지 않거나 부적절한 답변을 전문성을 바탕으로 걸러 냅니다.

Bard 활용 예: 파워쉘 스크립트에 대한 경고 분석

사진: UnsplashMojahid Mottakin

Bard 활용 예: 파워쉘 스크립트에 대한 경고 분석

최근 맨디언트 컨설턴트는 Bard를 사용해 파워쉘 스크립트에 대한 경고(Alert)를 해석하는 데 성공하였습니다. 이 컨설턴트는 SOC 분석가로 포춘 500대 기업 고객을 지원하던 중 다음 파워쉘 스크립트 관련 경고를 수신하였습니다. 맨디언트 컨설턴트는 수신한 경고를 철저히 조사합니다. 때때로 여러 개의 알림이 동시에 티켓 대기열에 쌓일 수 있습니다. 이런 상황에서도 신속한 상황 판단을 위해 맨디언트 컨설턴트는 경고의 우선순위를 정해 효율적으로 작업을 합니다.

일반적으로 파워쉘 스크립트는 짧습니다. 그러나 특정 작업을 수행하는 데 필요한 코드가 많이 포함된 경우 분량이 길어질 수 있습니다. 이런 유형의 파워쉘 스크립트가 알림에 표시되는 경우 시스템에서 수행하는 작업을 전반적으로 파악하기까지 시간이 많이 걸립니다. 생성형 AI 기술을 사용하면 경보 분석에 소요되는 시간을 줄일 수 있습니다. 분석 과정을 간소화하여 더 빨리 문제 해결에 뛰어들 수 있다는 것입니다. 실제로 맨디언트 컨설턴트는 Bard를 이용해 스크립트가 시스템에서 수행하는 작업을 빠르게 파악하고 조사 시간을 크게 단축하였습니다.

creating scriptblock text (1 of 1): if([intptr]::size-eq4){exit 0};try{$r='\d+\.\d+(\.\d+)?(\.\d+)?';$t='silentlycontinue';$o='applicable';$d='5.13.7';function l {param($h,$f,$s)$v=[bool]((whoami /user)-match's-1-5-18');$l="$(ni $env:programdata\patchmypcintunelogs -it di -fo -ea $t)\$(($q='patchmypc-softwareupdatedetectionscript.log'))";$p=switch($v){$true{$l}default{"$env:temp\$q"}}if((($i=gi $p -ea $t)).length-ge5mb){ri ($w=$i.fullname.replace('.log','.lo_')) -fo -ea $t;ren $i $w}"$(get-date)~[$s]~~~~"|out-file $p -a -fo}function c{param($s)try{switch($s.tochararray().where{$_-eq'.'}.count){0{$s+='.0'*3}1{$s+='.0.0'}2{$s+='.0'}}[version]$s}catch{$a=foreach($c in $s.split('.')){try{[int]$c}catch{[int]::maxvalue}}try{c ([string]::join('.',$a))}catch{[version]('0.0.0.0')}}}foreach($h in 'hkcu'){foreach($x in 'software'){foreach($s in(gp ($g="$h`:\$x\microsoft\windows\currentversion\uninstall\*") ($k='displayname'),displayversion -ea $t|select @{l='a';e={$_.$k}},@{l='b';e={[regex]::match($_.displayversion,$r)[0].value}},pschildname,@{l='c';e={[regex]::match($_.$k,$r)[0].value}})|?{if($_.pschildname-eq($m='')){($f=$true)}elseif($e=''){$_.a-notlike$e-and$_.a-like$z}else{$_.a-like$z}}){if($f){l $g $true "$($s.a) $m";return $o}if((c $s.b)-lt(c $d)-or(!$s.b-and$s.c-ne''-and(c $s.c)-lt(c $d))){if(($s.b-like($v='*')-or$s.c-like$v)){l $g $true "$($s.a) $d";return $o}}}l $g $false "$z $m $d"}}}catch{l '' '' $_.exception.message} scriptblock id: 000b0430-19c1-4e01-9b5c-9480166d41ce path: c:\program files (x86)\microsoft intune management extension\content\detectionscripts\7d1bed49-ac51-4db9-9844-58574b22b7f8_1.ps1

코드 블록에 고객과 관련된 컨텐츠가 없는지 검토한 후 맨디언트 컨설턴트는 Bard에게 이 코드가 무엇을 수행하는지 자세히 설명해 달라고 요청했습니다. Bard의 답변은 다음과 같았습니다.

이 스크립트는 마이크로소프트 Intune에서 관리하는 장치에 적용할 수 있는 소프트웨어 업데이트를 검색하는 데 사용됩니다. 이 스크립트는 윈도우 레지스트리에서 설치된 소프트웨어를 쿼리하고 소프트웨어의 버전을 사용 가능한 최신 버전과 비교하여 검색을 수행합니다. 소프트웨어 업데이트가 발견되면 스크립트는 업데이트를 기록하고 "applicable" 상태를 반환합니다. 소프트웨어 업데이트가 발견되지 않으면 스크립트는 "not applicable" 상태를 기록합니다. 이 스크립트는 파워쉘로 작성되면 Intune에서 관리는 모든 윈도우 장치에서 실행할 수 있습니다. 이 스크립트는 모든 Intune 관리 장치에 설치되는 소프트웨어 구성 요소인 Intune Management Extension에 포함되어 있습니다. 이 스크립트는 여러 함수로 나뉩니다.

  • l 함수는 스크립트의 결과를 파일에 기록합니다.
  • c 함수는 문자열 버전 번호를 version 객체로 변환합니다.li>
  • foreach 루프는 설치된 소프트웨어를 반복하여 업데이트를 확인합니다.

이 스크립트는 먼저 윈도우 레지스트리에서 설치된 소프트웨어를 쿼리하는 방식으로 작동합니다. 쿼리는 소프트웨어 프로그램 목록, 표시 이름 및 버전을 반환합니다. 그런 다음 스크립트는 소프트웨어 버전을 사용 가능한 최신 버전과 비교합니다. 소프트웨어 업데이트가 발견되면 스크립트는 업데이트를 기록하고 "applicable" 상태를 반환합니다. 소프트웨어 업데이트가 발견되지 않으면 스크립트에서 "not applicable" 상태를 기록합니다. 이 스크립트는 장치를 최신 상태로 유지하는 사용할 수 있는 강력한 도구입니다. 사용하기 쉽고 Intune으로 관리하는 모든 윈도우 장치에서 실행할 수 있습니다.

해석이 완벽하지는 않지만 생성형 AI의 설명은 스크립트의 일반적인 기능을 이해하는 데 큰 도움이 되었다고 합니다. Bard의 설명을 참조한 덕분에 스크립트를 더 쉽게 이해할 수 있었다고 합니다. 응답에서 가장 눈길을 끄는 부분은 마이크로소프트 Intune에서 관리하는 장치에 적용 가능한 소프트웨어 업데이트를 감지하는 데 사용한다는 첫 번째 문장입니다. 이 짧지만 강력한 문장을 통해 맨디언트 컨설턴트는 신속하게 컨텍스트를 확인하고 경고를 양성으로 분류해 문제를 해결할 수 있었습니다. 정리하자면 맨디언트 컨설턴트는 Bard를 이용한 빠른 작업으로 알림 분석을 신속하게 마무리할 수 있었고 그 덕분에 다른 활동에 더 많은 시간을 할애할 수 있었습니다. 더불어 경보 홍수로 인한 피로감도 줄일 수 있었다고 합니다. 참고로 바이러스토탈(VirusTotal)도 생성형 AI 기술을 이용한 분석 기능을 공개하고 있습니다.

공격자의 스마트 컨트랙트 분석

스마트 컨트랙트(Smart Contract)는 블록체인 기술을 기반으로 계약을 자동화하는 프로그램을 칭합니다. 스마트 컨트랙트는 계약 조건을 코드로 작성해 블록체인에 저장하며, 계약 조건이 충족되면 자동으로 실행됩니다. 스마트 컨트랙트는 계약을 보장하는 등 중요한 역할을 합니다. 공격자들은 스마트 컨트랙트를 악용할 수 있습니다. 공격자들의 목적 달성을 위해 스마트 컨트랙트를 해킹하거나 조정할 수 있습니다. 또한, 스마트 컨트랙트를 통해 자금 세탁을 할 수도 있습니다. 맨디언트 분석가들은 웹 3.0 환경에서 활동하는 위협 행위자를 추적합니다. 이와 관련해 직면한 도전 과제는 다양한 수준과 복잡성과 기능을 갖춘 수천 개의 스마트 컨트랙트를 추적하고 이해하는 것입니다. 대부분의 신뢰할 수 있는 합법적인 스마트 컨트랙트와 달리 위협 행위자는 프로젝트의 소스 코드를 공개하지 않습니다. 따라서 분석가는 컴파일을 통해 생성된 컨트랙트의 바이크 코드만 살펴볼 수 있습니다.

위협 행위자의 스마트 컨트랙트를 분석하려면 바이트 코드를 디컴파일하고 종종 모호하게 이름을 붙인 함수를 분석해야 합니다. 만약 분석가가 스마트 컨트랙트를 개발하는 데 사용하는 프로그래밍 언어인 Solidity에 익숙하지 않다면? 분석 작업은 지루하고 어려운 일이 될 수 있습니다. 최근 맨디언트 분석가들은 AI를 활용해 위협 행위자의 스마트 컨트랙트 분석합니다. 앞서 예로 든 파워쉘 스크립트처럼 Bard는 함수의 목적을 설명할 수 있을 뿐만 아니라 디컴파일된 바이트 코드를 친절히 설명합니다. 따라서 분석가는 손쉽게 함수의 기능과 역할에 따라 분석 우선순위를 정하기 편합니다. 생성형 AI가 특히 도움이 되는 경우는 수천 개의 스마트 컨트랙트를 사용해 자금을 훔치는 북한-넥서스 UNC4469 같은 공격자를 조사할 때입니다.

YARA 룰 작성

맨디언트 컨설팅은 중국-넥서스 UNC3986과 관련된 스마트 컨트랙트에 대응하였습니다. 이 사례의 도전 과제는 분석에 상당한 시간이 소요되는 대량의 포렌식 이미지를 효율적으로 분석해 고객의 시간과 비용을 아끼는 것이었습니다. 이 케이스에 참여한 맨디언트 컨설턴트는 YARA를 사용해 본 적은 있지만 룰(rule)을 작성한 적이 없었고, 구문도 익숙하지 않았습니다. 조사 과정에서 많은 지표를 확인하고 공격자가 삭제한 파일을 복구할 수 있었지만 이미지를 스캔할 수 있는 간편한 방법이 없었습니다.

맨디언트 컨설턴트는 특정 문자열을 검색하는 쿼리를 작성하거나 IP 범위를 검색하는 정규식을 포함하는 룰 생성 등 특정 작업 수행 방법과 YARA 구문 관련 질문을 Bard에 했습니다. 프롬프트에 입력한 질문에 Bard가 매번 정확한 답을 제시하지는 않았습니다. 가끔씩 YARA 3과 4 구문을 혼용하기도 했습니다. 하지만 맨디언트 컨설턴트가 Bard와 대화를 이어가는 동안 YARA에 대한 이해가 높아지면서 더 구체적인 질문을 할 수 있게 되었고 결과적으로 더 나은 답변을 Bard로부터 이끌어 낼 수 있었습니다.

관련해 맨디언트 컨설턴트의 이야기를 들어 보시죠.

대화하는 과정에서 YARA 구문을 충분히 이해할 수 있었기 때문에 Bard가 제공한 내용을 기반으로 각 이미지에서 공격자 관련 파일을 스캔할 수 있는 시그니처 파일을 만들 수 있었습니다. 보통 이미지당 5~10분 정도 시간이 필요한데, 이를 줄일 수 있었습니다. 이를 통해 사고 대응 팀은 공격자가 어떤 작업을 수행했는지에 대한 스토리를 신속하게 구체화하였고, 결과적으로 고객의 시간과 비용을 모두 아낄 수 있었습니다. 가장 좋았던 점은 YARA 구문이 상당히 정적인 특성이 있어서 다른 사례에 적용해 분석 효율을 높일 수 있다는 것이었습니다. 분석가로서 제가 어떤 결론에 도달했을 경우 어떻게 답을 내렸는지를 설명할 수 있는 포괄적이고 반복 가능한 프로세스가 있어야 합니다. 초거대 언어 모델(LLM) 기반 생성형 AI 서비스를 통해 결론을 내는 데에는 신중을 기해야 합니다. 나는 생성형 AI로 결론을 냈다기 보다 이를 활용해 스크립트와 알고리즘을 이해하고 검증하는 절차를 간소화하여 시간을 줄였습니다. 생성형 AI가 내놓은 답이 맞는지 확인하기 위해 테스트하는 것이 직접 분석을 하는 것보다 더 빠르게 결론에 도달할 수 있는 경우가 많았습니다. 침해 조사에서는 속도가 결정적인 요소가 될 때가 많습니다.

공격 탐지를 위해 파이썬 스크립트를 만들고 채팅을 통해 침해 대응 팀에 알리기

맨디언트는 공격자가 네트워크에 접근하지 못하게 하려면 VPN에 다중 인증(MFA)를 구현하는 중요하다고 권고했고 고객도 이에 동의했습니다. 하지만 고객이 MFA를 전사적으로 적용하려면 몇 주의 시간이 필요했습니다. 사고 대응 과정에서 맨디언트 컨설턴트들은 고객에게 귀중한 시간을 벌어주기 위해 끊임없이 변화하는 공격자의 전술, 기법, 절차(TTP)를 따라잡기 위해 빠른 대응 템포를 유지해야 했습니다. 템포 유지에 생성형 AI는 큰 도움이 됩니다.

한 번은 FQDN(Fully Qualified Domain Name)을 확인해 공격자가 인프라를 노출하도록 하고자 하였습니다. 이 케이스에 참여한 한 분석가는 Bard를 이용해 새로운 IP 주소에 대한 FQDN 확인을 모니터링하고, 알려진 오탐을 필터링하고, 인스턴트 메시징을 통해 침해 대응 팀에 알릴 수 있는 파이썬 스크립트를 10분 이내에 작성할 수 있었습니다. 이 스크립트는 기술적으로 뛰어난 것은 아니었지만 Bard 덕분에 분석가들이 맞춤형 솔루션을 신속하게 구축해 공격자의 템포를 따라갈 수 있었습니다. 이를 통해 분석가들은 공격자의 인프라를 주시하는 가운데 변경이 일어날 경우 이를 자동 알림을 통해 확인하고, 차단 및 모니터링을 위해 변경 사항을 클라이언트에 민첩하게 전달할 수 있었습니다.

Bard를 이용해 SIEM 쿼리 만들기

또 다른 침해 대응 케이스의 예를 알아보겠습니다. 당시 맨디언트 컨설턴트는 공격자가 내부 네트워크의 애플리케이션에 접근한 침입에 대응을 하였습니다. 피해 환경은 데이터 레이크를 중심으로 로그 데이터 통합하는 과정에 있었습니다. 이번 케이스는 데이터 레이크 구축 전에 사고가 터졌습니다. 당시 고객은 각각 고유한 사용자 지정 쿼리 언어, 데이터 소스, 인덱스, 필드가 있는 여러 SIEM 솔루션에 담긴 중요 애플리케이션 관련 로그를 보유하고 있었습니다. 맨디언트 컨설턴트는 여러 SIEM 솔루션의 전문가를 모두 불러와 도움을 요청하는 대신에 모든 데이터 소스에서 실행할 수 있는 기본 쿼리 세트를 만들었습니다. 그런 다음 맨디언트 분석가는 Bard를 활용해 다양한 SIEM 언어로 기본 쿼리 집합을 생성했습니다. 그러고 나서 Bard를 이용해 만든 쿼리를 템플릿으로 사용해 기본 쿼리를 "mad-lib" 스타일로 다양한 쿼리 언어로 변환할 수 있었습니다. 이를 통해 맨디언트는 여러 SIEM 솔루션을 위해 일일이 쿼리를 만드는 대신 하나의 쿼리 템플릿으로 모든 고객 데이터 소스에 접근해 일관된 분석을 수행할 수 있었습니다.

맬웨어 분석 속도 향상

마지막으로 맨디언트 위협 인텔리전스 분석가들은 최근 맬웨어 분석을 용이하게 하기 위해 파이썬으로 작성한 자동화 스크립트 개선을 위해 Bard를 활용하였습니다. 맨디언트는 맬웨어 분석 가상 머신을 시작하고, 데이터베이스에서 맬웨어 샘플을 다운로드하고, 샘플을 가상 머신의 데스크톱으로 전송한 다음, 가상 머신에서 네트워크 인터페이스 카드를 제거하는 등의 일련의 작업 과정을 자동화하고자 하였습니다. 이외에 맬웨어 압축 해제 작업이 완료되면 압축 해제된 샘플을 다운로드하여 맬웨어 데이터베이스에서 다시 업로드하는 작업도 자동화가 필요했습니다. 이를 위해 Bard의 도움을 받았는데 맨디언트 분석가들은 "파이썬으로 SMB 또는 WMI 연결 만들기" 또는 "파이썬으로 기존 파일에서 암호로 보호된 zip 만들기" 같은 질문을 Bard 프롬프트에 입력하며 대화를 이어갔고 이를 통해 자동화 스크립트 작성을 위한 도움을 받았습니다. 또한, 맨디언트 위협 인텔리전스 분석가들은 최근 Bard를 이용해 WidDbg 명령과 해당 명령에 대한 컨텍스트를 신속하게 제공하여 수작업으로 하던 기존 맬웨어 분석 과정을 크게 간소화하였습니다.

결론

본 포스팅에서 알아본 사례를 통해 우리는 보안 분석에서 생성형 AI가 방어자를 지원할 수 있는 잠재력이 어느 정도인지 알 수 있습니다. '위협, 수고, 인력'이라는 틀 안에서 볼 때 소개한 사례들을 관통하는 핵심 가치는 분명합니다. 바로 수고와 인력 문제를 줄이는 것입니다. 사고 대응과 같이 속도가 중요한 경우 생성형 AI를 활용하면 특정 작업을 빠르게 자동화하고, 틈새 영역에 대한 깊은 기술적 지식이 없어도 방어자가 공격자를 더 잘 탐지할 수 있습니다.

서두에 언급한 바와 같이 생성형 AI는 양날의 검과 같습니다. 이 기술은 특정 방식으로 공격자의 역량을 강화할 수 있습니다. 다행히도 방어자 역시 이점을 취할 수 있습니다. 본 포스팅을 통해 조직의 보안 관행에 생성형 AI를 통합하는 방법에 대한 아이디어를 얻을 수 있었기를 바랍니다. 보안 모범 사례와 책임감 있는 AI 모델 구현에 대한 내용이 궁금하다면 구글의 보안 AI 프레임워크를 확인하기 바랍니다.