위협 인텔리전스 오픈 API
주니퍼 ATP 클라우드(Juniper Advanced Threat Prevention Cloud)는 다음과 같은 API를 제공하여 탁월한 클라우드 기반 보호 기능을 통해 정교한 멀웨어 및 사이버 공격으로부터 네트워크를 보호할 수 있습니다.
위협 인텔리전스 API 개요
위협 인텔리전스 개방형 API를 사용하면 요구 사항에 맞게 주니퍼 ATP 클라우드 C&C(Command and Control Server) 피드를 프로그래밍할 수 있습니다. 위협 인텔리전스 API를 사용하여 다음 작업을 수행할 수 있습니다.
IP, URL 또는 도메인을 위협 수준이 1에서 10까지의 C&C 피드에 주입합니다. 최대 30개의 서로 다른 사용자 지정 C&C 피드를 만들 수 있습니다.
IP는 IP 주소, IP 범위 또는 IP 서브넷일 수 있습니다.
IPv4 및 IPv6 주소가 모두 지원됩니다.
IP, URL 또는 도메인의 위협 수준을 1에서 10으로 업데이트합니다.
피드에서 특정 서버를 삭제하거나 전체 피드를 삭제합니다.
피드 처리 엔진에서 작업(처리) 또는 오류(있는 경우)의 현재 상태를 검색합니다.
위협 인텔리전스 API는 프로그래밍 방식으로 액세스할 수 있도록 JSON 형식의 Swagger API 사양을 지원합니다. Swagger API 사양에 대한 자세한 내용은 https://threat-api.sky.junipersecurity.net/swagger.json 를 참조하세요.
Junos OS 19.2부터 SRX 시리즈 방화벽은 위협 인텔리전스 피드에서 암호화된 트래픽(HTTPS) 및 HTTP 트래픽에 대한 검사를 지원합니다. SNI(서버 이름 ID) 검사도 지원됩니다. 이러한 변경 사항은 새로운 CLI 명령을 도입하지 않습니다. 기존 명령은 이 기능을 사용합니다.
다음 표에는 위협 인텔리전스 API에 대한 속도 제한(분당 수행할 수 있는 요청 수)이 나와 있습니다. 이러한 속도 제한을 초과하면 오류가 발생합니다 429 - Too many Requests
.
기능 |
분당 최대 요청 수 |
---|---|
C & C 피드 |
60 |
차단 목록 피드 |
60 |
허용 목록 피드 |
60 |
Dns |
50 |
구성 및 설정
API에 액세스하려면 주니퍼 ATP 클라우드 웹 UI에서 애플리케이션 토큰을 생성하고 해당 토큰을 인증 헤더의 전달자 토큰으로 사용해야 합니다.
응용 프로그램 토큰을 생성하려면:To generate an application token:
자격 증명을 사용하여 주니퍼 ATP 클라우드 웹 UI에 로그인합니다. Administration > Application Tokens(관리 응용 프로그램 토큰 )를 선택하고 더하기(+) 기호를 클릭합니다. 표시되는 팝업 상자에 토큰 이름 및 기타 필수 세부 정보를 입력하고 확인을 클릭하여 새 토큰을 만듭니다. 그림 1을 참조하십시오.
그림 1: 응용 프로그램 토큰 만들기그림 2와 같이 새 토큰 생성을 나타내는 확인 팝업 메시지가 나타납니다. 이제 이 토큰을 사용하여 주니퍼 ATP 클라우드 API에 액세스할 수 있습니다.
그림 2: 응용 프로그램 토큰 만들기 확인참고:사용자당 최대 10개의 토큰을 생성할 수 있으며 각 토큰은 1년 동안 유효합니다.
응용 프로그램 토큰을 만드는 방법에 대한 자세한 내용은 응용 프로그램 토큰 만들기를 참조하십시오.
사용 예
다음 cURL 예제에서는 위협 인텔리전스 API의 사용을 보여 줍니다.
curl -k -v -XPOST -H "Authorization: Bearer <TOKEN>" -F file=@/tmp/whitelist.txt <API HOST>/v1/cloudfeeds/whitelist/file/ip/<FEEDNAME>
curl -k -v -XPOST -H "Authorization: Bearer <TOKEN>" -F file=@/tmp/whitelist.txt <API HOST>/v1/cloudfeeds/cc/file/ip/<FEEDNAME>
어디:
API HOST
은 고객 포털의 위치에 해당하는 Open API 호스트 이름의 이름입니다. 해당 위치에 대한 올바른 호스트 이름은 표 1 을 참조하십시오.TOKEN
는 주니퍼 ATP 클라우드 웹 UI에서 생성된 애플리케이션 토큰입니다.FEED NAME
은 만들려는 피드의 이름입니다.
주니퍼 ATP 클라우드 API 개요
주니퍼 ATP 클라우드 API를 사용하여 다음 작업을 수행할 수 있습니다.
특정 서버 유형에 대한 차단 목록 또는 허용 목록을 검색합니다.
차단 목록 또는 허용 목록 서버 목록에서 IP, URL 또는 FQDN을 업데이트합니다.
IP는 IP 주소, IP 범위 또는 IP 서브넷일 수 있습니다.
IPv4 및 IPv6 주소가 모두 지원됩니다.
목록에서 특정 서버를 삭제하거나 전체 목록을 삭제합니다.
주니퍼 ATP 클라우드 API는 프로그래밍 방식으로 액세스할 수 있도록 JSON 형식의 Swagger API 사양을 지원합니다. Swagger API 사양에 대한 자세한 내용은 https://api.sky.junipersecurity.net/swagger.json 를 참조하세요.
다음 표에는 주니퍼 ATP 클라우드 API에 대한 속도 제한(분당 수행할 수 있는 요청 수)이 나와 있습니다. 이러한 속도 제한을 초과하면 오류가 발생합니다 429 - Too many Requests
.
기능 |
분당 최대 요청 수 |
---|---|
해시 조회 |
50 |
파일 제출 |
10 |
차단 목록 |
60 |
허용 목록 |
60 |
주니퍼 ATP 클라우드는 허용 목록에 최대 3,000개의 항목과 차단 목록에 3,000개의 전체를 지원합니다.
구성 및 설정
API에 액세스하려면 주니퍼 ATP 클라우드 웹 UI에서 애플리케이션 토큰을 생성하고 해당 토큰을 인증 헤더의 전달자 토큰으로 사용해야 합니다. 토큰 생성에 대한 자세한 내용은 구성 및 설정 섹션을 참조하십시오.
주니퍼 ATP 클라우드 URL
주니퍼 ATP 클라우드 호스트 이름은 위치에 따라 다릅니다. 다음 표를 참조하십시오.
위치 |
주니퍼 ATP 클라우드 URL |
---|---|
미국 |
고객 포털: https://amer.sky.junipersecurity.net Open API(감염된 호스트, 허용 목록/차단 목록, 샘플 제출): https://api.sky.junipersecurity.net 개방형 API(위협 인텔리전스): https://threat-api.sky.junipersecurity.net |
유럽 연합 |
고객 포털: https://euapac.sky.junipersecurity.net Open API(감염된 호스트, 허용 목록/차단 목록, 샘플 제출): https://api-eu.sky.junipersecurity.net 개방형 API(위협 인텔리전스): https://threat-api.sky.junipersecurity.net |
Apac |
고객 포털: https://apac.sky.junipersecurity.net Open API(감염된 호스트, 허용 목록/차단 목록, 샘플 제출): https://api-apac.sky.junipersecurity.net 개방형 API(위협 인텔리전스): https://threat-api-apac.sky.junipersecurity.net |
캐나다 |
고객 포털: https://canada.sky.junipersecurity.net Open API(감염된 호스트, 허용 목록/차단 목록, 샘플 제출): https://api-canada.sky.junipersecurity.net 개방형 API(위협 인텔리전스): https://threat-api-canada.sky.junipersecurity.net |
사용 예
다음 cURL 예제는 주니퍼 ATP 클라우드 API의 사용을 보여줍니다.
curl -k -v -XPOST -H "Authorization: Bearer <TOKEN>” -F file=@/tmp/blacklist.txt <API HOSTNAME>/v1/skyatp/blacklist/file/ip/<FEED NAME>
어디:
API HOST
은 고객 포털의 위치에 해당하는 Open API 호스트 이름의 이름입니다. 해당 위치에 대한 올바른 호스트 이름은 표 1 을 참조하십시오.TOKEN
는 주니퍼 ATP 클라우드 웹 UI에서 생성된 애플리케이션 토큰입니다.FEED NAME
은 만들려는 피드의 이름입니다.
파일/해시 API 개요
파일/해시 API를 사용하면 분석을 위해 파일을 제출할 수 있습니다. 다음 작업을 수행할 수 있습니다.
샘플 멀웨어 점수를 해시로 조회합니다.
맬웨어 분석을 위한 샘플을 제출합니다.
특정 목록의 파일에서 IP, URL 또는 FQDN을 업데이트합니다.
IP는 IP 주소, IP 범위 또는 IP 서브넷일 수 있습니다.
IPv4 및 IPv6 주소가 모두 지원됩니다.
파일/해시 API는 프로그래밍 방식으로 액세스할 수 있도록 JSON 형식의 Swagger API 사양을 지원합니다. Swagger API 사양에 대한 자세한 내용은 https://api.sky.junipersecurity.net/swagger.json 를 참조하세요.
구성 및 설정
API에 액세스하려면 주니퍼 ATP 클라우드 웹 UI에서 애플리케이션 토큰을 생성하고 해당 토큰을 인증 헤더의 전달자 토큰으로 사용해야 합니다. 토큰 생성에 대한 자세한 내용은 구성 및 설정 섹션을 참조하십시오.
사용 예
다음 cURL 예제에서는 파일/해시 API를 사용하는 방법을 보여 줍니다.
curl -H "Authorization: Bearer<TOKEN>” -k <API HOSTNAME>/v1/skyatp/lookup/hash/<SHA256>?full_report=true
curl -H "Authorization: Bearer<TOKEN>” -k -F file=@/srv/sample.exe <API HOSTNAME>/v1/skyatp/submit/sample
API HOST
은 고객 포털의 위치에 해당하는 Open API 호스트 이름의 이름입니다. 해당 위치에 대한 올바른 호스트 이름은 표 1 을 참조하십시오.
어디:
TOKEN
는 주니퍼 ATP 클라우드 웹 UI에서 생성된 애플리케이션 토큰입니다.SHA256
는 샘플 해시입니다. 현재 SHA256만 지원됩니다.
전체 보고서는 향후 릴리스에서 완전히 지원될 예정입니다. 지금 받는 보고서는 모양과 내용이 약간 다를 수 있습니다.
감염된 호스트 API 개요
감염된 호스트 피드는 주니퍼 ATP 클라우드에 의해 생성되며 감염된 호스트에 플래그를 지정하는 데 사용됩니다. 피드는 동적입니다. 호스트는 주니퍼 ATP 클라우드가 독점 알고리즘을 통해 호스트가 손상되었다고 의심할 때 자동으로 추가되며, 호스트가 더 이상 손상되지 않았다고 판단되면 사용자 인터페이스를 통해 목록에서 수동으로 제거할 수 있습니다. 피드에는 호스트의 IP 주소 또는 IP 서브넷이 위협 수준(예: xxx.xxx.xxx.133 및 위협 수준 5)과 함께 나열됩니다. 이 피드는 영역에 고유하며 실제 내의 IP 주소는 겹치지 않는 것으로 간주됩니다.
감염된 호스트 피드와 연결된 것은 허용 목록 및 차단 목록입니다. 이는 일반적인 주니퍼 ATP 클라우드 허용 목록 및 차단 목록과 다릅니다. 감염된 호스트 피드는 이러한 목록을 사용하여 현재 감염된 호스트 피드에 있는 호스트를 제거하고(허용 목록) 감염된 호스트 피드에 호스트를 항상 나열합니다(차단 목록).
감염된 호스트 API를 사용하여 다음을 수행할 수 있습니다.
현재 감염된 호스트 피드의 모든 IP 주소 목록을 반환합니다.
감염된 호스트 허용 목록 또는 차단 목록에 있는 모든 IP 주소 목록을 반환합니다.
감염된 호스트 허용 목록 또는 차단 목록에서 IP 주소를 삭제합니다.
감염된 호스트 허용 목록 또는 차단 목록에 IP 주소를 추가합니다.
감염된 호스트 API는 프로그래밍 방식으로 액세스할 수 있도록 JSON 형식의 Swagger API 사양을 지원합니다. Swagger API 사양에 대한 자세한 내용은 https://api.sky.junipersecurity.net/swagger.json 를 참조하세요.
구성 및 설정
API에 액세스하려면 주니퍼 ATP 클라우드 웹 UI에서 애플리케이션 토큰을 생성하고 해당 토큰을 인증 헤더의 전달자 토큰으로 사용해야 합니다. 토큰 생성에 대한 자세한 내용은 구성 및 설정 섹션을 참조하십시오.
IP 필터 API 개요
DAE(Dynamic Address Entry)는 보안 정책에 동적 IP 주소 정보를 제공합니다. DAE는 가져올 수 있는 단일 IP 접두사가 아닌 IP 주소 그룹입니다. 이러한 IP 주소는 특정 도메인 또는 위협을 가하는 원치 않는 특정 위치와 같은 공통 특성이 있는 엔터티에 대한 것입니다. 그런 다음 관리자는 보안 정책 내에서 DAE를 사용하도록 보안 정책을 구성할 수 있습니다. DAE가 업데이트되면 변경 내용이 자동으로 보안 정책의 일부가 됩니다. 정책을 수동으로 업데이트할 필요가 없습니다. 이것은 IP 주소 전용 피드입니다. URL 또는 FQDN(정규화된 도메인 이름)을 지원하지 않습니다.
IP 필터 API를 사용하여 다음 작업을 수행할 수 있습니다.
IP 필터 피드에서 IP 주소(.csv 파일) 제거
IP 필터 피드에 IP 주소(.csv 파일)를 추가합니다.
IP 필터 피드에서 특정 IP 주소를 제거합니다.
IP 필터 피드에 특정 IP 주소를 추가합니다.
특정 IP 필터 피드를 제거합니다.
특정 IP 필터 피드의 처리 상태를 가져옵니다.
IP 필터 API는 프로그래밍 방식으로 액세스할 수 있도록 JSON 형식의 Swagger API 사양을 지원합니다. Swagger API 사양에 대한 자세한 내용은 https://api.sky.junipersecurity.net/swagger.json 를 참조하세요.
구성 및 설정
API에 액세스하려면 주니퍼 ATP 클라우드 웹 UI에서 애플리케이션 토큰을 생성하고 해당 토큰을 인증 헤더의 전달자 토큰으로 사용해야 합니다. 토큰 생성에 대한 자세한 내용은 구성 및 설정 섹션을 참조하십시오.
예제
이 예에서는 Tor를 통해 신원을 숨기면서 DMZ의 웹 서버에 대해 표적 공격이 수행되고 있습니다. Tor 출구 노드는 자주 움직이며 방화벽 정책 내에서 모든 1000+ 출구 노드의 최신 목록을 유지하는 것은 거의 불가능합니다. 그러나 주니퍼 ATP 클라우드 API를 사용하면 이 작업을 쉽게 수행할 수 있습니다. 이 예에 대한 자세한 내용은 Sky ATP를 사용한 사이버 위협 인텔리전스 자동화를 참조하십시오.
다음은 다음 작업을 수행하는 예제 스크립트입니다.
cURL을 통해 공식 TorProject의 출구 노드 목록을 조사하고 를 통해
grep
합법적인 IP 정보를 추출합니다.주니퍼 ATP 클라우드 개방형 API를 활용하여 타사 위협 인텔리전스를 설치하고 네트워크의 모든 SRX 시리즈 방화벽에 전파합니다.
활성 Tor 릴레이가 항상 차단되도록 cron을 통해 매시간 실행됩니다.
#!/bin/bash # Define Application Token (Paste in your value between the "") APPToken="Your_Application_Token_Here" # Define the name of the feed you wish to create FeedName="Tor_Exit_Nodes" #Define temporary file to store address list TorList=/var/tmp/torlist.txt # cURL fetches Tor Relay list from https://check.torproject.org/exit-addresses # grep identifies and extracts valid IP addresses from the list curl -k https://check.torproject.org/exit-addresses | grep -E -o '(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]? [0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5] |2[0-4][0-9]|[01]?[0-9][0-9]?)' > $TorList #Remove old Feed information before uploading new list curl -k -v -XDELETE -H "Authorization: Bearer $APPToken" -F server='*' https://threat-api.sky.junipersecurity.net/v1/cloudfeeds/blacklist/param/ip/${FeedName} # Wait for 5 seconds before uploading new list sleep 5 #Upload List to SkyATP as Feed Tor_Exit_Nodes curl -k -v -XPOST -H "Authorization: Bearer $APPToken" -F file=@${TorList} https://threat-api.sky.junipersecurity.net/v1/cloudfeeds/blacklist/file/ip/${FeedName} # Cleanup rm $TorList # Exit
스크립트가 성공적으로 실행되면 아래 ICMP 요청 중에 최신 Tor 노드가 차단되는 것을 볼 수 있습니다 (feed-name=Tor_Exit_Nodes
)
<14>1 2016-10-17T15:18:11.618Z SRX-1500 RT_SECINTEL - SECINTEL_ACTION_LOG [junos@x.x.x.x.x.137 category="secintel" sub-category="Blacklist" action="BLOCK" action-detail="DROP" http-host="N/A" threat-severity="0" source-address="5.196.121.161" source-port="1" destination-address="x.x.0.10" destination-port="24039" protocol-id="1" application="N/A" nested-application="N/A" feed-name="Tor_Exit_Nodes" policy-name="cc_policy" profile-name="Blacklist" username="N/A" roles="N/A" session-id-32="572564" source-zone-name="Outside" destination-zone-name="DMZ"] category=secintel sub-category=Blacklist action=BLOCK action-detail=DROP http-host=N/A threat-severity=0 source-address=x.x.0.110 source-port=1 destination-address=x.x.x.161 destination-port=24039 protocol-id=1 application=N/A nested-application=N/A feed-name=Tor_Exit_Nodes policy-name=cc_policy profile-name=Blacklist username=N/A roles=N/A session-id-32=572564 source-zone-name=Outside destination-zone-name=DMZ
클라우드 피드에 대한 SRX 시리즈 업데이트 간격
다음 표에는 각 피드 유형에 대한 업데이트 간격이 나와 있습니다. SRX 시리즈 방화벽이 신규 및 업데이트된 피드 콘텐츠를 요청할 때 새 콘텐츠가 없으면 업데이트가 다운로드되지 않습니다.
범주 |
피드 |
SRX 업데이트 간격(초) |
---|---|---|
명령 및 제어 |
주니퍼 피드 |
1,800 |
통합 피드 |
1,800 |
|
고객 피드 |
1,800 |
|
Geoip |
geoip_country |
435,600 |
허용 목록 |
고객 피드 |
3,600 |
차단 목록 |
고객 피드 |
3,600 |
감염된 호스트 |
감염된 호스트 |
60 |
IPFilter (아이피필터 리터) |
고객 피드 |
1,800 |
오피스 365 |
1,800 |
|
Dns |
DNS 피드 |
1,800 |
DNS 범주에 대한 개방형 API
다음 표에는 SRX 시리즈 방화벽이 다운로드하는 피드 매니페스트가 나와 있습니다.
HTTP 메서드 |
Uri |
요청 본문 |
응답 |
---|---|---|---|
포스트/패치 |
/DNS/파일/{feed_name} |
파일 : file.txt 고양이 file_content> 1.1.1.1,10 1.1.1.2,10 |
{ "request_id": "문자열" } |
가져오기 |
/DNS/파일/{feed_name} |
{ "메시지":"문자열", "request_id": "문자열" } |
|
삭제 |
/DNS/파일/{feed_name} |
파일 : file.txt 고양이 file_content> 1.1.1.1,10 |
{ "request_id": "문자열" } |