> 운영 및 유지보수 > 안전 > ZoomEye를 활용한 APT 공격 탐지 사례 분석

ZoomEye를 활용한 APT 공격 탐지 사례 분석

WBOY
풀어 주다: 2023-05-27 19:19:11
앞으로
1396명이 탐색했습니다.

ZoomEye의 온라인 데이터는 덮어쓰기 및 업데이트 모드입니다. 즉, 두 번째 스캔에서 데이터가 스캔되지 않으면 업데이트된 데이터가 덮어쓰여지지 않습니다. ZoomEye의 데이터는 첫 번째 스캔에서 얻은 배너 데이터를 유지합니다. 이러한 메커니즘은 실제로 이러한 종류의 악성 공격 추적 기능이 현장에 적합합니다. Botnet, APT 및 기타 공격과 같은 악성 공격에 사용되는 다운로드 서버는 일반적으로 발견된 후 직접 비활성화되고 폐기됩니다. 물론 일부는 해킹된 대상이기도 합니다. 그들은 또한 오프라인에서도 매우 폭력적입니다! 따라서 많은 공격 사이트가 ZoomEye에 의해 온라인으로 캐시될 가능성이 높습니다.

물론, ZoomEye 히스토리 API에서 제공되는 데이터는 커버 여부에 관계없이 각 스캔에서 얻은 배너 데이터에 대해 쿼리할 수 있습니다. 그러나 현재 제공되는 ZoomEye 히스토리 API는 IP를 통해서만 쿼리할 수 있으며, 확인할 수 없습니다. 키워드 매칭을 통해 검색되므로 위에서 언급한 ZoomEye 온라인 캐시 데이터 검색 및 포지셔닝과 함께 사용해야 합니다.

사례 1: Darkhotel APT

사실 며칠 전 "Black Technology" Knowledge Planet에서 언급한 바 있는데 "버그"만 수정하면 됩니다. 이번에 Darkhotel에서 사용하는 IE 0day는 CVE여야 합니다. -2019-1367 대신 CVE-2020-0674(勋肉丁@奇安信에게 감사드립니다). 물론 이 "버그"는 이 기사의 주제에 영향을 미치지 않습니다.

ZoomEye를 활용한 APT 공격 탐지 사례 분석

위 사진에서 볼 수 있듯이 ZoomEye 온라인 데이터를 사용하여 당시 Darkhotel 퍼들 공격 사이트의 IP 주소를 찾았습니다. ZoomEye SDK를 사용하여 이 IP의 기록을 쿼리했습니다.

╭─heige@404Team ~╰─$python                                                                                                                                    Python 2.7.16 (default, Mar 15 2019, 21:13:51)[GCC 4.2.1 Compatible Apple LLVM 10.0.0 (clang-1000.11.45.5)] on darwinType "help", "copyright", "credits" or "license" for more information.
 import zoomeye
 zm = zoomeye.ZoomEye(username="xxxxx", password="xxxx")
 zm.login()
 u'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpX...'
 data = zm.history_ip("202.x.x.x")
 22
로그인 후 복사

List. ZoomEye 과거 데이터에 포함된 IP 데이터의 시간 노드와 해당 포트 서비스

 ...
 >>>for i in data['data']:
 ...     print(i['timestamp'],i['portinfo']['port'])
 ...
 (u'2020-01-28T10:58:02', 80)
 (u'2020-01-05T18:33:17', 80)
 (u'2019-11-25T05:27:58', 80)
 (u'2019-11-02T16:10:40', 80)
 (u'2019-10-31T11:39:02', 80)
 (u'2019-10-06T05:24:44', 80)
 (u'2019-08-02T09:52:27', 80)
 (u'2019-07-27T19:22:11', 80)
 (u'2019-05-18T10:38:59', 8181)
 (u'2019-05-02T19:37:20', 8181)
 (u'2019-05-01T00:48:05', 8009)
 (u'2019-04-09T16:29:58', 8181)
 (u'2019-03-24T20:46:31', 8181)
 (u'2018-05-18T18:22:21', 137)
 (u'2018-02-22T20:50:01', 8181)
 (u'2017-03-13T03:11:39', 8181)
 (u'2017-03-12T16:43:54', 8181)
 (u'2017-02-25T09:56:28', 137)
 (u'2016-11-01T00:22:30', 137)
 (u'2015-12-30T22:53:17', 8181)
 (u'2015-03-13T20:17:45', 8080)
 (u'2015-03-13T19:33:15', 21)
로그인 후 복사

IE 0day에 심어진 워터링 홀 공격의 시간 노드와 포트를 살펴보겠습니다:

>>> for i in data['data']:
 ...     if "164.js" in i['raw_data']:
 ...             print(i['timestamp'],i['portinfo']['port'])
 ...
 (u'2020-01-28T10:58:02', 80)
 (u'2020-01-05T18:33:17', 80)
 (u'2019-11-25T05:27:58', 80)
 (u'2019-11-02T16:10:40', 80)
 (u'2019-10-31T11:39:02', 80)
 (u'2019-10-06T05:24:44', 80)
로그인 후 복사

분명히 대략적인 시간 범위는 또한, 이 워터링 홀 공격은 2019-10-06 05:24:44부터 2020-01-28 10:58:02까지입니다. 또한, 이 IP는 공격자가 구매한 VPS가 아니며, 다음과 같이 특정 웹사이트를 직접 공격합니다. 공격을 위한 "워터링 홀"입니다. 이 IP 웹사이트는 이르면 2019-10-06에 침입한 것이 확실합니다! 이 웅덩이의 웹사이트 특성으로 볼 때 기본적으로 Darkhotel의 주요 공격 대상은 이 웹사이트를 방문하는 사용자임을 유추할 수 있습니다!

우리는 가능한 침입 지점을 분석하는 데 도움이 되도록 2019년에 이 IP로 어떤 포트 서비스가 열렸는지 계속 나열합니다.

>>> for i in data['data']:
 ...     if "2019" in i['timestamp']:
 ...             print(i['timestamp'],i['portinfo']['port'],i['portinfo']['service'],i['portinfo']['product'])
 ...
 (u'2019-11-25T05:27:58', 80, u'http', u'nginx')
 (u'2019-11-02T16:10:40', 80, u'http', u'nginx')
 (u'2019-10-31T11:39:02', 80, u'http', u'nginx')
 (u'2019-10-06T05:24:44', 80, u'http', u'nginx')
 (u'2019-08-02T09:52:27', 80, u'http', u'nginx')
 (u'2019-07-27T19:22:11', 80, u'http', u'nginx')
 (u'2019-05-18T10:38:59', 8181, u'http', u'Apache Tomcat/Coyote JSP engine')
 (u'2019-05-02T19:37:20', 8181, u'http', u'Apache Tomcat/Coyote JSP engine')
 (u'2019-05-01T00:48:05', 8009, u'ajp13', u'Apache Jserv')
 (u'2019-04-09T16:29:58', 8181, u'http', u'Apache httpd')
 (u'2019-03-24T20:46:31', 8181, u'http', u'Apache Tomcat/Coyote JSP engine')
로그인 후 복사

매우 일반적인 JSP 운영 환경인 포트 8009는 2019년 5월에 열렸고 Tomcat 배경과 같은 문제 관리 취약한 비밀번호는 늘 흔한 침투수단이었죠~~

그런데 사실 이번 공격은 또 다른 IP도 포함됐는데요, 업데이트로 인해 IP 관련 포트 배너가 덮어씌워져서 ZoomEye를 통해 직접 온라인으로 검색을 할 수가 없습니다. 하지만 이 IP를 알고 있다면 ZoomEye 기록 데이터 API를 사용하여 이 IP의 기록 데이터를 쿼리할 수도 있습니다. 여기서는 자세히 설명하지 않겠습니다.

사례 2: 포이즌 아이비(APT-C-01)

포이즌 아이비(APT-C-01)에 대한 자세한 보고서를 참조하세요. https://ti.qianxin.com/uploads/2018/09/20/6f8ad451646c9eda1f75c5d31f39f668.pdf 우리는

"포이즌 아이비 조직이 공격 페이로드를 제어하고 배포하기 위해 사용하는 제어 도메인 이름"에 직접적으로 초점을 맞췄습니다. http://updateinfo.servegame.org"

"그런 다음

hxxp://updateinfo.servegame.org/tiny1detvghrt.tmp
로그인 후 복사

"

URL에서 페이로드를 다운로드합니다. 먼저 이 도메인 이름에 해당하는 IP를 찾으려고 합니다. 분명히 현재로서는 많은 것을 얻지 못했습니다. :

╭─heige@404Team ~╰─$ping updateinfo.servegame.orgping: cannot resolve updateinfo.servegame.org: Unknown host
로그인 후 복사

Qi Anxin의 보고서에서 사용된 다운로드 서버 WEB 서비스 디렉터리를 탐색할 수 있음을 알 수 있습니다

ZoomEye를 활용한 APT 공격 탐지 사례 분석

그래서 "tiny1detvghrt.tmp"라는 파일 이름을 직접 검색할 수 있어야 하며, 확실히 찾았습니다

ZoomEye를 활용한 APT 공격 탐지 사례 분석

여기서 기본적으로 updateinfo.servegame.org에 해당하는 IP가 165.227.220.223임을 확인할 수 있습니다. 그런 다음 과거 데이터를 쿼리하는 이전 루틴을 시작합니다.

  >>> data = zm.history_ip("165.227.220.223")
    >>> 9
    >>> for i in data['data']:
     ...     print(i['timestamp'],i['portinfo']['port'])
     ...
     (u'2019-06-18T19:02:22', 22)
     (u'2018-09-02T08:13:58', 22)
     (u'2018-07-31T05:58:44', 22)
     (u'2018-05-20T00:55:48', 80)
     (u'2018-05-16T20:42:35', 22)
     (u'2018-04-08T07:53:00', 80)
     (u'2018-02-22T19:04:29', 22)
     (u'2017-11-21T19:09:14', 80)
     (u'2017-10-04T05:17:38', 80)
로그인 후 복사

계속해서 시간을 살펴보세요. 이tiny1detvghrt.tmp 배포 간격:

>>> for i in data['data']:
 ...     if "tiny1detvghrt.tmp" in i['raw_data']:
 ...             print(i['timestamp'],i['portinfo']['port'])
 ...
 (u'2018-05-20T00:55:48', 80)
 (u'2018-04-08T07:53:00', 80)
 (u'2017-11-21T19:09:14', 80)
로그인 후 복사

적어도 괜찮습니다. 공격이 2017년 11월 말부터 배포된 것으로 확인되었습니다. 그런 다음 이 시간 노드 2017-10-04 05:17 앞에 또 다른 시간 노드가 있습니다. 38. 그의 배너 데이터를 살펴보겠습니다.

>>> for i in data['data']:
 ...     if "2017-10-04" in i['timestamp']:
 ...             print(i['raw_data'])
 ...
 HTTP/1.1 200 OK
 Date: Tue, 03 Oct 2017 21:17:37 GMT
 Server: Apache
 Vary: Accept-Encoding
 Content-Length: 1757
 Connection: close
 Content-Type: text/html;charset=UTF-8nbsp;HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
 
  <title>Index of /</title>
 
 <h2>Index of /</h2>
  
로그인 후 복사
           
Name a> Last modified a> Size a> Description a>

doajksdlfsadk.tmp a> 2017-09-15 08:21   4.9K  
doajksdlfsadk.tmp.1 a> 2017-09-15 08:21   4.9K  
doajksdlrfadk.tmp a> 2017-09-27 06:36   4.9K  
dvhrksdlfsadk.tmp a> 2017-09-27 06:38   4.9K  
vfajksdlfsadk.tmp a> 2017-09-27 06:37   4.9K  
wget-log a> 2017-09-20 07:24   572   

이 배너 데이터에서 이는 첫 번째 경우 잘 타겟팅된 침입 후 임플란트 퍼들과 다르다는 결론을 내릴 수 있습니다. 이것은 독립적으로 제어할 수 있는 서버여야 합니다. doajksdlfsadk.tmp의 명명 방법과 파일 크기로 볼 때(둘 다 4.9k) 기본적으로 이 시점은 공격자가 공격을 시작하기 전의 실습이어야 함을 유추할 수 있습니다. APT공격은 처음부터 발견되자마자 포기

!

위 내용은 ZoomEye를 활용한 APT 공격 탐지 사례 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:yisu.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿