OT 모니터링 센서에 대한 취약성 관리 API 참조
- 아티클
이 문서에는 Microsoft Defender for IoT OT 모니터링 센서를 지원하는 취약성 관리 REST API가 나와 있습니다.
API 응답에 포함된 데이터에는 온-프레미스 관리 콘솔에서 취약성 보고서를 생성한 것과 동일한 정보가 포함됩니다.
디바이스(디바이스 취약성 정보 검색)
이 API를 사용하여 각 디바이스에 대한 취약성 평가 결과를 요청합니다.
URI: /api/v1/reports/vulnerabilities/devices
GET
이 API는 요청 매개 변수 없이 호출됩니다.
형식: JSON
평가된 디바이스 및 보고된 취약성을 나타내는 JSON 개체의 배열입니다.
취약성이 없는 것으로 확인된 디바이스는 결과 응답에 포함되지 않습니다.
디바이스 필드
이름 | 유형 | null 허용/null 허용 안 함 | 값 목록 |
---|---|---|---|
name | String | null 허용 안 함 | - |
ipAddresses | JSON 배열 | null 허용 안 함 | - |
securityScore | 숫자 | null 허용 안 함 | - |
공급업체 | String | Nullable | |
firmwareVersion | String | Nullable | - |
model | String | Nullable | - |
isWirelessAccessPoint | 부울 | null 허용 안 함 |
True 또는 False |
operatingSystem | 운영 체제 개체 | Nullable | - |
취약성 | 취약성 개체 | null 허용 안 함 | - |
운영 체제 필드
이름 | 유형 | null 허용/null 허용 안 함 | 값 목록 |
---|---|---|---|
name | String | null 허용 안 함 | - |
type | String | null 허용 안 함 | - |
version | String | Nullable | - |
latestVersion | String | Nullable | - |
취약성 필드
이름 | 유형 | null 허용/null 허용 안 함 | 값 목록 |
---|---|---|---|
antiViruses | 문자열의 JSON 배열 | Nullable | 바이러스 백신 이름 |
plainTextPasswords | JSON 배열 | Nullable | 암호 개체 |
원격 액세스 | JSON 배열 | Nullable | 원격 액세스 개체 |
isBackupServer | 부울 | null 허용 안 함 |
True 또는 False |
openedPorts | JSON 배열 | Nullable | 열린 포트 개체 |
isEngineeringStation | 부울 | null 허용 안 함 |
True 또는 False |
isKnownScanner | 부울 | null 허용 안 함 |
True 또는 False |
CVE | JSON 배열 | Nullable | CVE 개체 |
isUnauthorized | 부울 | null 허용 안 함 |
True 또는 False |
malwareIndicationsDetected | 부울 | null 허용 안 함 |
True 또는 False |
weakAuthentication | 문자열의 JSON 배열 | Nullable | 약한 인증을 사용하는 검색된 애플리케이션 |
암호 필드
이름 | 유형 | null 허용/null 허용 안 함 | 값 목록 |
---|---|---|---|
password | String | null 허용 안 함 | - |
protocol | String | null 허용 안 함 | - |
strength | String | null 허용 안 함 |
Very weak , Weak , Medium , Strong |
원격 액세스 필드
이름 | 유형 | Nullable | 값 목록 |
---|---|---|---|
port | 숫자 | null 허용 안 함 | - |
전송 | String | null 허용 안 함 |
TCP , UDP |
client | String | null 허용 안 함 | IP 주소 |
클라이언트 소프트웨어 | String | null 허용 안 함 | 원격 프로토콜의 이름(예: SSH , VNC , Remote desktop 또는 Team viewer ) |
포트 필드 열기
이름 | 유형 | null 허용/null 허용 안 함 | 값 목록 |
---|---|---|---|
port | 숫자 | null 허용 안 함 | - |
전송 | String | null 허용 안 함 |
TCP 또는 UDP |
protocol | String | Nullable | - |
isConflictingWithFirewall | 부울 | null 허용 안 함 |
True 또는 False |
CVE 필드
이름 | 유형 | null 허용/null 허용 안 함 | 값 목록 |
---|---|---|---|
id | String | null 허용 안 함 | - |
점수 | 숫자, 10진수 값 | null 허용 안 함 | - |
description | String | null 허용 안 함 | - |
응답 예제
[
{
"name": "IED \#10",
"ipAddresses": ["10.2.1.10"],
"securityScore": 100,
"vendor": "ABB Switzerland Ltd, Power Systems",
"firmwareVersion": null,
"model": null,
"operatingSystem": {
"name": "ABB Switzerland Ltd, Power Systems",
"type": "abb",
"version": null,
"latestVersion": null
},
"vulnerabilities": {
"antiViruses": [
"McAfee"
],
"plainTextPasswords": [
{
"password": "123456",
"protocol": "HTTP",
"strength": "Very Weak"
}
],
"remoteAccess": [
{
"port": 5900,
"transport": "TCP",
"clientSoftware": "VNC",
"client": "10.2.1.20"
}
],
"isBackupServer": true,
"openedPorts": [
{
"port": 445,
"transport": "TCP",
"protocol": "SMP Over IP",
"isConflictingWithFirewall": false
},
{
"port": 80,
"transport": "TCP",
"protocol": "HTTP",
"isConflictingWithFirewall": false
}
],
"isEngineeringStation": false,
"isKnownScanner": false,
"cves": [
{
"id": "CVE-2015-6490",
"score": 10,
"description": "Frosty URL - Stack-based buffer overflow on Allen-Bradley MicroLogix 1100 devices before B FRN 15.000 and 1400 devices through B FRN 15.003 allows remote attackers to execute arbitrary code via unspecified vectors"
},
{
"id": "CVE-2012-6437",
"score": 10,
"description": "MicroLogix 1100 and 1400 do not properly perform authentication for Ethernet firmware updates, which allows remote attackers to execute arbitrary code via a Trojan horse update image"
},
{
"id": "CVE-2012-6440",
"score": 9.3,
"description": "MicroLogix 1100 and 1400 allows man-in-the-middle attackers to conduct replay attacks via HTTP traffic."
}
],
"isUnauthorized": false,
"malwareIndicationsDetected": true
}
}
]
형식: GET
API:
curl -k -H "Authorization: <AUTH_TOKEN>" https://<IP_ADDRESS>/api/v1/reports/vulnerabilities/devices
예제:
curl -k -H "Authorization: 1234b734a9244d54ab8d40aedddcabcd" https://127.0.0.1/api/v1/reports/vulnerabilities/devices
보안(보안 취약성 검색)
이 API를 사용하여 일반적인 취약성 평가 결과를 요청합니다. 이 평가는 시스템의 보안 수준에 대한 인사이트를 제공합니다.
이 평가는 특정 디바이스 평가가 아니라 일반적인 네트워크 및 시스템 정보를 기반으로 합니다.
URI: /api/v1/reports/vulnerabilities/security
GET
이 API는 요청 매개 변수 없이 호출됩니다.
형식: 하나 이상 데이터 테이블의 JSON 표현이며, 각각 특정 구조와 잠재적으로 다른 구조를 포함합니다.
응답은 테이블 제목을 테이블 행에 매핑하는 맵 뷰에 표시됩니다. 행은 구조가 동일한 개체 목록으로 표시됩니다.
unauthorizedDevices 필드
Name | 유형 | null 허용/null 허용 안 함 | 값 목록 |
---|---|---|---|
address | String | Nullable | 권한 없는 디바이스의 IP 또는 MAC 주소 |
name | String | Nullable | 권한 없는 디바이스의 이름 |
firstDetectionTime | 숫자 | Nullable | Epoch 시간 및 UTC 표준 시간대에서 디바이스가 처음 검색된 타임스탬프(밀리초) |
lastSeen | 숫자 | Nullable | Epoch 시간 및 UTC 표준 시간대에서 트래픽이 디바이스에서 보내고 받은 것으로 마지막으로 검색된 타임스탬프(밀리초) |
illegalTrafficByFirewallRules 필드
Name | 유형 | null 허용/null 허용 안 함 | 값 목록 |
---|---|---|---|
server | String | Nullable | 서버 IP 주소 |
client | String | Nullable | 클라이언트 IP 주소 |
port | 숫자 | Nullable | 서버 포트 |
전송 | String | Nullable |
TCP , UDP 또는 ICMP |
weakFirewallRules 필드
Name | 유형 | null 허용/null 허용 안 함 | 값 목록 |
---|---|---|---|
sources | 원본의 JSON 배열 | Nullable | 다음 형식의 원본 JSON 배열: - Any - ip address (host) - from ip-to ip (RANGE) - ip address, subnet mask (NETWORK) |
대상 | 대상의 JSON 배열 | Nullable | 다음 형식 중에서 대상 개체의 JSON 배열: - Any - ip address (host) - from ip-to ip (RANGE) - ip address, subnet mask (NETWORK) |
포트 | 포트의 JSON 배열 | Nullable | 다음 형식 중에서 포트 개체의 JSON 배열: - Any - port (protocol, if detected) - from port-to port (protocol, if detected) |
accessPoints 필드
Name | 유형 | null 허용/null 허용 안 함 | 값 목록 |
---|---|---|---|
macAddress | String | Nullable | 액세스 지점의 MAC 주소 |
공급업체 | String | Nullable | 액세스 지점의 공급업체 이름 |
ipAddress | String | Nullable | 액세스 지점의 IP 주소 또는 N/A |
name | String | Nullable | 액세스 지점의 디바이스 이름 또는 N/A |
무선 | String | Nullable | 액세스 지점이 무선 네트워크에 연결되어 있는지 여부: No , Suspected 또는 Yes |
connectionsBetweenSubnets 필드
Name | 유형 | null 허용/null 허용 안 함 | 값 목록 |
---|---|---|---|
server | String | Nullable | 서버의 IP 주소 |
client | String | Nullable | 클라이언트의 IP 주소 |
industrialMalwareIndicators 필드
Name | 유형 | null 허용/null 허용 안 함 | 값 목록 |
---|---|---|---|
detectionTime | 숫자 | Nullable | Epoch 시간 및 UTC 표준 시간대에서 맬웨어가 처음 검색된 타임스탬프(밀리초) |
alertMessage | String | Nullable | 전송된 경고 메시지 |
description | String | Nullable | 경고 메시지 설명 |
디바이스 | JSON 배열 | null 허용 안 함 | 디바이스 이름을 나타내는 문자열의 JSON 배열 |
internetConnections 필드
Name | 유형 | null 허용/null 허용 안 함 | 값 목록 |
---|---|---|---|
internalAddress | String | Nullable | 연결의 내부 IP 주소 |
승인됨 | 부울 | Nullable |
Yes 또는 No |
externalAddresses | JSON 배열 | null 허용 안 함 | 연결 외부 IP 주소의 JSON 배열 |
응답 예제
{
"unauthorizedDevices": [
{
"address": "10.2.1.14",
"name": "PLC \#14",
"firstDetectionTime": 1462645483000,
"lastSeen": 1462645495000,
}
],
"redundantFirewallRules": [
{
"sources": "170.39.3.0/255.255.255.0",
"destinations": "Any",
"ports": "102"
}
],
"connectionsBetweenSubnets": [
{
"server": "10.2.1.22",
"client": "170.39.2.0"
}
],
"industrialMalwareIndications": [
{
"detectionTime": 1462645483000,
"alertMessage": "Suspicion of Malicious Activity (Regin)",
"description": "Suspicious network activity was detected. Such behavior might be attributed to the Regin malware.",
"addresses": [
"10.2.1.4",
"10.2.1.5"
]
}
],
"illegalTrafficByFirewallRules": [
{
"server": "10.2.1.7",
"port": "20000",
"client": "10.2.1.4",
"transport": "TCP"
},
{
"server": "10.2.1.8",
"port": "20000",
"client": "10.2.1.4",
"transport": "TCP"
},
{
"server": "10.2.1.9",
"port": "20000",
"client": "10.2.1.4",
"transport": "TCP"
}
],
"internetConnections": [
{
"internalAddress": "10.2.1.1",
"authorized": "Yes",
"externalAddresses": ["10.2.1.2",”10.2.1.3”]
}
],
"accessPoints": [
{
"macAddress": "ec:08:6b:0f:1e:22",
"vendor": "TP-LINK TECHNOLOGIES",
"ipAddress": "173.194.112.22",
"name": "Enterprise AP",
"wireless": "Yes"
}
],
"weakFirewallRules": [
{
"sources": "170.39.3.0/255.255.255.0",
"destinations": "Any",
"ports": "102"
}
]
}
형식: GET
API:
curl -k -H "Authorization: <AUTH_TOKEN>" https://<IP_ADDRESS>/api/v1/reports/vulnerabilities/security
예제:
curl -k -H "Authorization: 1234b734a9244d54ab8d40aedddcabcd" https://127.0.0.1/api/v1/reports/vulnerabilities/security
운영(운영 취약성 검색)
이 API를 사용하여 일반적인 취약성 평가 결과를 요청합니다. 이 평가는 네트워크의 작동 상태에 대한 인사이트를 제공합니다. 이 평가는 특정 디바이스 평가가 아니라 일반적인 네트워크 및 시스템 정보를 기반으로 합니다.
URI: /api/v1/reports/vulnerabilities/operational
GET
이 API는 요청 매개 변수 없이 호출됩니다.
형식: 하나 이상 데이터 테이블의 JSON 표현이며, 각각 특정 구조와 잠재적으로 다른 구조를 포함합니다.
응답은 테이블 제목을 테이블 행에 매핑하는 맵 뷰에 표시됩니다. 행은 구조가 동일한 개체 목록으로 표시됩니다.
backupServer 결과 필드
Name | 유형 | null 허용/null 허용 안 함 | 값 목록 |
---|---|---|---|
source | String | Nullable | 원본 IP 주소 |
destination | String | Nullable | 대상 IP 주소 |
port | 숫자 | Nullable | 백업 서버 포트 |
전송 | String | Nullable | 백업 서버 전송 프로토콜 TCP 또는 UDP |
backupMaximalInterval | String | Nullable | 백업 간 최대 간격 시간 |
lastSeenBackup | 숫자 | Nullable | Epoch 시간 및 UTC 표준 시간대에서 백업이 마지막으로 표시된 타임스탬프(밀리초) |
ipNetworks 결과 필드
Name | 유형 | null 허용/null 허용 안 함 | 값 목록 |
---|---|---|---|
addresses | 숫자 | null 허용 안 함 | 서브넷 범위에서 검색된 IP 주소 수입니다. |
network | String | null 허용 안 함 | 서브넷 기본 IP 주소입니다. |
마스크 | String | null 허용 안 함 | 서브넷 마스크입니다. |
protocolProblems 결과 필드
Name | 유형 | null 허용/null 허용 안 함 | 값 목록 |
---|---|---|---|
protocol | String | null 허용 안 함 | 프로토콜 위반 경고가 트리거된 프로토콜 |
addresses | IP 주소의 JSON 배열 | null 허용 안 함 | 위반이 발생한 IP 주소의 JSON 배열 |
경고 | String | null 허용 안 함 | 트리거된 경고의 제목 |
reportTime | 숫자 | null 허용 안 함 | Epoch 시간 및 UTC 표준 시간대에서 보고서가 마지막으로 생성된 타임스탬프(밀리초) |
protocolDataVolumes 결과 필드
Name | 유형 | null 허용/null 허용 안 함 | 값 목록 |
---|---|---|---|
protocol | String | Nullable | OT 네트워크 센서에 의해 네트워크에서 검색된 프로토콜 |
volume | String | Nullable | OT 네트워크 센서에서 캡처한 프로토콜 패킷의 볼륨(MB) |
disconnections 결과 필드
Name | 유형 | null 허용/null 허용 안 함 | 값 목록 |
---|---|---|---|
assetAddress | String | Nullable | 연결이 끊긴 자산의 IP 주소 |
assetName | String | Nullable | 연결이 끊긴 자산의 이름 |
lastDetectionTime | 숫자 | Nullable | Epoch 시간 및 UTC 표준 시간대에서 연결 끊김이 마지막으로 검색된 타임스탬프(밀리초) |
backToNormalTime | 숫자 | Nullable | Epoch 시간 및 UTC 표준 시간대에서 연결이 반환된 타임스탬프(밀리초) |
응답 예제
{
"backupServer": [
{
"backupMaximalInterval": "1 Hour, 29 Minutes",
"source": "10.2.1.22",
"destination": "170.39.2.14",
"port": 10000,
"transport": "TCP",
"lastSeenBackup": 1462645483000
}
],
"ipNetworks": [
{
"addresses": "21",
"network": "10.2.1.0",
"mask": "255.255.255.0"
},
{
"addresses": "3",
"network": "170.39.2.0",
"mask": "255.255.255.0"
}
],
"protocolProblems": [
{
"protocol": "DNP3",
"addresses": [
"10.2.1.7",
"10.2.1.8"
],
"alert": "Illegal DNP3 Operation",
"reportTime": 1462645483000
},
{
"protocol": "DNP3",
"addresses": [
"10.2.1.15"
],
"alert": "Master Requested an Application Layer Confirmation",
"reportTime": 1462645483000
}
],
"protocolDataVolumes": [
{
"protocol": "MODBUS (502)",
"volume": "21.07 MB"
},
{
"protocol": "SSH (22)",
"volume": "0.001 MB"
}
],
"disconnections": [
{
"assetAddress": "10.2.1.3",
"assetName": "PLC \#3",
"lastDetectionTime": 1462645483000,
"backToNormalTime": 1462645484000
}
]
}
형식: GET
API:
curl -k -H "Authorization: <AUTH_TOKEN>" https://<IP_ADDRESS>/api/v1/reports/vulnerabilities/operational
예제:
curl -k -H "Authorization: 1234b734a9244d54ab8d40aedddcabcd" https://127.0.0.1/api/v1/reports/vulnerabilities/operational
임시 조치(임시 조치 단계 검색)
이 API를 사용하여 임시 조치 평가를 요청합니다. 이 평가는 검색된 취약성을 완화하기 위한 권장 단계를 제공합니다. 이 평가는 특정 디바이스 평가가 아니라 일반적인 네트워크 및 시스템 정보를 기반으로 합니다.
URI: /api/v1/reports/vulnerabilities/mitigation
GET
이 API는 요청 매개 변수 없이 호출됩니다.
형식: JSON
권장되는 임시 조치 단계를 나타내는 JSON 개체입니다.
응답 필드
필드 이름 | Type | Nullable | 값 목록 |
---|---|---|---|
알림: | 문자열의 JSON 배열 | null 허용 안 함 | 검색된 취약성에 대한 권장 임시 조치 단계 |
mitigation | JSON 배열 | null 허용 안 함 | mitigation 개체 |
mitigation 필드
필드 이름 | Type | Nullable | 값 목록 |
---|---|---|---|
content | String | null 허용 안 함 | 검색된 취약성에 대한 권장 임시 조치 단계 |
scoreImprovement | 정수 | Nullable | 임시 조치 단계를 수행한 후 예상되는 보안 개선 비율입니다. |
details | 테이블 | Nullable | 임시 조치 권장 사항을 나열하는 테이블은 위험 평가 보고서에서 생성됩니다. 각 권장 사항에는 작업이 수행되는 경우 가능한 보안 영향 등에 대한 세부 정보가 포함됩니다. 자세한 내용은 위험 임시 조치를 참조하세요. |
참고
여러 임시 조치 단계가 있을 수 있으며 일부 단계는 notifications
필드에 반환되고 다른 단계는 mitigation
필드에 반환될 수 있습니다.
scoreImprovement
및 details
데이터가 있는 항목은 mitigation
필드에만 반환됩니다.
scoreImprovement
및 details
데이터가 없는 항목은 notifications
필드에만 반환됩니다.
응답 예제
{
"notifications": ["Firewall policy import", "Marking \"important devices\"", "Further device information import"],
"mitigation": [{
"content": "Install an Antivirus solution to increase protection of the workstations",
"details": null,
"scoreImprovement": 10
}, {
"content": "Investigate all malware indicators (Contact your incident response team or support.microsoft.com). When assured the problem is solved, acknowledge the alert",
"details": {
"name": "",
"description": {
"name": "",
"important": false,
"warning": false
},
"headers": ["Detection Time", "Alert Message", "Description", "Devices"],
"rows": [
["03/10/2022 07:10:24", "Address Scan Detected", "Address scan detected.\nScanning address: 10.10.10.22\nScanned subnet: 10.11.0.0/16\nScanned addresses: 10.11.1.1, 10.11.20.1, 10.11.20.10, 10.11.20.100, 10.11.20.2, 10.11.20.3, 10.11.20.4, 10.11.20.5, 10.11.20.6, 10.11.20.7...\nIt is recommended to notify the security officer of the incident.", ""],
]
},
"scoreImprovement": 8
}, {
"content": "Install a backup server in the network",
"details": null,
"scoreImprovement": 5
}, {
"content": "Install latest security updates (Devices: 2)",
"details": {
"name": "",
"description": {
"name": "",
"important": false,
"warning": false
},
"headers": ["Name", "Address"],
"rows": [
["10.13.10.5", "10.13.10.5"],
["192.168.1.127", "192.168.1.127"]
]
},
"scoreImprovement": 2
}, {
"content": "Increase password complexity for authentication (Devices: 53)",
"details": {
"name": "",
"description": {
"name": "",
"important": false,
"warning": false
},
"headers": ["Name", "Address"],
"rows": [
["10.10.10.13", "10.10.10.13"],
["10.10.10.14", "10.10.10.14"],
["10.10.10.15", "10.10.10.15"],
["10.13.10.3", "10.13.10.3"],
["10.13.10.40", "10.13.10.40"],
["10.13.10.5", "10.13.10.5"],
["10.13.11.2", "10.13.11.2"],
["10.13.11.3", "10.13.11.3"],
["192.168.1.100", "192.168.1.100"],
["192.168.1.242", "192.168.1.242"]
]
},
"scoreImprovement": 2
}, {
"content": "Investigate and acknowledge all unacknowledge alerts",
"details": {
"name": "",
"description": {
"name": "",
"important": false,
"warning": false
},
"headers": ["Detection Time", "Alert Message", "Description"],
"rows": [
["03/10/2022 07:10:24", "Address Scan Detected", "Address scan detected.\nScanning address: 10.10.10.22\nScanned subnet: 10.11.0.0/16\nScanned addresses: 10.11.1.1, 10.11.20.1, 10.11.20.10, 10.11.20.100, 10.11.20.2, 10.11.20.3, 10.11.20.4, 10.11.20.5, 10.11.20.6, 10.11.20.7...\nIt is recommended to notify the security officer of the incident."],
["03/10/2022 07:44:52", "No Traffic Detected on Sensor Interface", "The sensor stopped detecting network traffic on local_listener."]
]
},
"scoreImprovement": 1
}]
}
curl -k -H "Authorization: 1234b734a9244d54ab8d40aedddcabcd" "https://<IP address>/api/v1/reports/vulnerabilities/mitigation"
다음 단계
자세한 내용은 Defender for IoT API 참조 개요를 참조하세요.
피드백
이 페이지가 도움이 되었나요?