
ICS/SCADA 검색 및 열거를 위한 Nmap NSE 스크립트—BACnet, EtherNet/IP, CoDeSys, Fox, Modicon, Omron, S7—보안 평가를 위해 프로토콜 쿼리를 사용합니다.
#Redpoint
###Digital Bond의 ICS 열거 도구
Redpoint는 ICS 애플리케이션과 장치를 열거하기 위한 Digital Bond의 연구 프로젝트입니다.
우리는 평가에서 Redpoint 도구를 사용하여 ICS 장치를 발견하고 2차 테스트에 도움이 되는 정보를 수집합니다. 이 도구들 중 일부는 이 저장소에서 Nmap NSE 스크립트로 공개됩니다.
Redpoint 도구는 합법적인 프로토콜 또는 애플리케이션 명령을 사용하여 장치와 애플리케이션을 발견하고 열거합니다. 무엇을 악용하거나 충돌시키려는 시도는 없습니다. 그러나 많은 ICS 장치와 애플리케이션은 취약하여 예상치 못한 트래픽에 충돌하거나 예상치 못한 방식으로 응답할 수 있으므로 주의해서 사용하십시오.
각 스크립트는 아래에 문서화되어 있으며 이 저장소의 .nse 파일로 제공됩니다.
BACnet-discover-enumerate.nse - BACnet 장치 식별 및 열거
codesys-v2-discover.nse - CoDeSys V2 컨트롤러 식별 및 열거
enip-enumerate.nse - Rockwell Automation 및 기타 벤더의 EtherNet/IP 장치 식별 및 열거
fox-info.nse - Niagara Fox 장치 식별 및 열거
modicon-info.nse - Schneider Electric Modicon PLC 식별 및 열거
omron-info.nse - Omron PLC 식별 및 열거
pcworx-info.nse - PC Worx 프로토콜 지원 PLC 식별 및 열거
proconos-info.nse - ProConOS 지원 PLC 식별 및 열거
s7-enumerate.nse - Siemens SIMATIC S7 PLC 식별 및 열거
==
###BACnet-discover-enumerate.nse
![BACnet-discover-enumerate 샘플 출력] (http://digibond.wpengine.netdna-cdn.com/wp-content/uploads/2014/03/BACnet-nse.png)
####저자
Stephen Hilt 및 Michael Toecker
Digital Bond, Inc
####목적 및 설명
BACnet-discover-enumerate.nse의 목적은 먼저 IP 연결 장치가 BACnet을 실행 중인지 식별하는 것입니다. 이는 미리 생성된 BACnet 메시지로 장치를 질의하여 작동합니다. 최신 버전의 BACnet 프로토콜은 확인 응답으로 응답하고, 구버전은 BACnet 오류 메시지를 반환합니다. 확인 응답 또는 오류 중 하나의 존재는 대상 IP 주소에 BACnet 지원 장치가 있음을 증명하기에 충분합니다.
둘째, 확인 응답이 수신되면 이 스크립트는 응답하는 BACnet 장치의 여러 BACnet 속성을 열거하려고 시도합니다. 다시 장치는 미리 생성된 BACnet 메시지로 질의됩니다. 성공적인 열거는 특별히 제작된 요청을 사용하며, BACnet 장치가 해당 속성을 지원하지 않으면 성공하지 못합니다.
이 스크립트가 질의하는 BACnet 속성은 다음과 같습니다.
Vendor ID - 등록된 BACnet 벤더에 해당하는 번호입니다. 스크립트는 연결된 벤더 이름도 반환합니다.
Vendor Number - 장치에 구성된 벤더 이름을 나타내는 문자열입니다. Vendor ID는 ASHARE에 등록된 번호이므로 Vendor ID와 다를 수 있습니다.
Object Identifier - 장치를 고유하게 식별하는 번호입니다. Object-Identifier를 알면 BACnet 클라이언트 소프트웨어로 명령을 보낼 수 있으며, 여기에는 BACnet 장치의 값, 프로그램, 일정 및 기타 운영 정보를 변경하는 명령이 포함됩니다. 이 속성은 모든 BACnet 장치에 필수입니다.
Firmware Revision - BACnet 장치의 펌웨어 개정 번호.
Application Software Revision - BACnet 통신에 사용되는 소프트웨어의 개정 번호.
Object Name - BACnet 장치에 이름을 할당하는 사용자 정의 문자열로, 일반적으로 시운전 시 기술자가 입력합니다. 이 속성은 모든 BACnet 장치에 필수입니다.
Model Name - BACnet 장치의 모델
Description - 장치를 설명하기 위한 사용자 정의 문자열로, 일반적으로 시운전 시 기술자가 입력합니다.
Location - 장치의 물리적 위치를 기록하기 위한 사용자 정의 문자열로, 일반적으로 시운전 시 기술자가 입력합니다.
Broadcast Distribution Table (BDT) - BACnet 네트워크의 BACnet 브로드캐스트 관리 장치(BBMD) 목록입니다. 이는 BACnet 네트워크의 일부인 모든 서브넷을 식별합니다.
Foreign Device Table (FDT) - BACnet 장치에 등록된 외부 장치 목록입니다. 외부 장치는 BACnet 네트워크의 일부인 서브넷에 없고 BDT에도 없는 모든 장치입니다. 외부 장치는 종종 외부 네트워크에 있으며 공격자의 IP 주소일 수 있습니다.
BDT와 FDT는 큰 목록이 될 수 있으며 대규모 Nmap 스캔에서는 바람직하지 않을 수 있습니다. 기본 스크립트는 BDT와 FDT를 가져오지 않습니다. BDT와 FDT를 가져오려면 --script-args full=yes 명령을 실행하십시오. 사용 섹션을 참조하십시오.
![BACnet-discover-enumerate BDT 및 FDT 포함 샘플 출력] (http://digibond.wpengine.netdna-cdn.com/wp-content/uploads/2014/08/screenshot_bacnet-1.png)
이 스크립트는 BACnet 네트워크에 외부 장치로 참여하지 않고 단일 요청으로 장치의 Object Identifier를 검색하기 위해 2004년 BACnet 사양에 추가된 기능을 사용합니다. (자세한 내용은 ANSI/ASHRAE Standard 135-2001에 대한 ANSI/ASHRAE Addendum a를 참조하십시오)
####역사 및 배경
BACnet에 대한 Wikipedia 기사에서 http://en.wikipedia.org/wiki/BACnet:
BACnet은 건물 자동화 및 제어 네트워크를 위한 통신 프로토콜입니다. 이는 ASHRAE, ANSI 및 ISO 표준[1] 프로토콜입니다. BACnet 트래픽의 기본 포트는 UDP/47808입니다.
BACnet은 난방, 환기 및 공조 제어, 조명 제어, 출입 통제, 화재 감지 시스템 및 관련 장비와 같은 애플리케이션을 위한 건물 자동화 및 제어 시스템에 사용됩니다. BACnet 프로토콜은 컴퓨터화된 건물 자동화 장치가 수행하는 특정 건물 서비스와 관계없이 정보를 교환할 수 있는 메커니즘을 제공합니다.
####설치
이 스크립트를 실행하려면 Nmap이 필요합니다. Nmap이 없다면 Nmap 지침에 따라 Nmap을 다운로드하여 설치하십시오. http://nmap.org/download.html
#####Windows
bacnet-discover.nse를 다운로드한 후에는 NSE Scripts 디렉터리로 이동해야 합니다. 이 작업은 관리자 권한으로 수행해야 합니다. 시작 -> 프로그램 -> 보조프로그램으로 이동하여 '명령 프롬프트'를 마우스 오른쪽 버튼으로 클릭하십시오. '관리자 권한으로 실행'을 선택하십시오.
move BACnet-discover-enumerate.nse C:\Program Files (x86)\Nmap\scripts
#####Linux
BACnet-discover-enumerate.nse를 다운로드한 후에는 NSE Scripts 디렉터리로 이동해야 합니다. 이 작업은 sudo/root 권한으로 수행해야 합니다.
sudo mv BACnet-discover-enumerate.nse /usr/share/nmap/scripts
####사용법
터미널 창/명령 프롬프트에서 다음 명령 중 하나를 사용하십시오. 여기서 host는 BACnet을 스캔하려는 대상입니다. 출력에 BDT와 FDT를 포함하려면 --script-args full=yes를 사용하십시오.
Windows: nmap -sU -p 47808 --script BACnet-discover-enumerate <host>
Windows: nmap -sU -p 47808 --script BACnet-discover-enumerate --script-args full=yes <host>
Linux: sudo nmap -sU -p 47808 --script BACnet-discover-enumerate <host>
Linux: sudo nmap -sU -p 47808 --script BACnet-discover-enumerate --script-args full=yes <host>
스캔 중 DNS 조회를 수행하지 않아 결과를 빠르게 하려면 -n 옵션을 사용하십시오. 또한 전체 결과를 위해 -Pn 옵션을 사용하여 장치가 켜져 있는지 확인하는 핑을 비활성화하십시오.
nmap -sU -Pn -p 47808 -n --script BACnet-discover-enumerate <host>
####참고 사항
이 스크립트의 공식 버전은 다음에서 유지 관리됩니다: https://github.com/digitalbond/Redpoint/blob/master/BACnet-discover-enumerate.nse
이 스크립트는 표준 BACnet 소스 및 대상 포트인 UDP 47808을 사용합니다.
최신(2004년 2월 25일 이후) BACnet 장치는 사양상 자체 유효 인스턴스 번호가 있는 'catchall' 객체 식별자를 사용하는 특정 요청에 응답해야 합니다(ANSI/ASHRAE Standard 135-2001에 대한 ANSI/ASHRAE Addendum a 참조). 구버전 BACnet 장치는 이 catchall에 응답하지 않을 수 있으며 대신 BACnet 오류 패킷으로 응답합니다.
이 스크립트는 외부 장치로 BACnet 네트워크에 참여하지 않으며, IP 주소 지정이 가능한 장치에 BACnet 요청을 직접 보낼 뿐입니다.
== ###codesys-v2-discover.nse ![codesys-v2-discover 샘플 출력] (http://digibond.wpengine.netdna-cdn.com/wp-content/uploads/2016/03/codesys-v2-discover-win.png)
####저자
Stephen Hilt, Reid Wightman
####목적 및 설명
codesys-v2-discover.nse 스크립트는 3S-Software GmbH에서 만든 버전 2 래더 로직 런타임을 실행하는 PLC를 식별합니다. 이 컨트롤러는 새 래더 로직 설치와 실행 중인 래더 로직 디버깅을 위한 독점 바이너리 프로토콜을 사용합니다. 이 프로토콜은 인증을 요구할 수 있습니다. 실제로 이 동작을 지원하는 장치는 거의 없습니다. 이 스크립트는 인증을 테스트하지 않습니다.
이 스크립트는 장치에 간단한 식별 요청을 보냅니다. 응답 메시지에는 PLC에서 실행 중인 CoDeSys의 운영 체제와 특정 포인트 릴리스가 포함될 수 있습니다.
####역사 및 배경
Digital Bond는 2012년 4월 CoDeSys 런타임 시스템이 설계상 안전하지 않다는 세부 정보를 공개했습니다. 이 프로토콜은 일반적으로 TCP/1200 또는 TCP/2455를 제어 포트로 사용합니다. 제어 프로토콜에는 컨트롤러에서 파일을 업로드하고 다운로드하는 기능이 포함되어 있습니다. 프로토콜은 추가 기능을 제공하는 명령 셸을 제공할 수도 있습니다. 셸 기능에는 일반적으로 현재 실행 중인 래더 로직을 시작/중지하고 컨트롤러에서 디버깅 정보를 검색하는 기능이 포함됩니다.
초기 권고는 런타임 버전 2에만 적용되었습니다. Digital Bond는 또한 HD Moore가 자신의 인터넷 스캐닝 프로젝트의 일부로 원래 작성한 개념 증명 Nmap 스크립트를 공개했습니다.
이 프로토콜 버전에 대한 Nessus 스크립트도 제작되었지만, Nessus 스크립트에는 오류가 있어 빅엔디언 CPU가 있는 컨트롤러를 제대로 확인하지 못합니다.
####설치
이 스크립트를 실행하려면 Nmap이 필요합니다. Nmap이 없다면 Nmap 지침에 따라 Nmap을 다운로드하여 설치하십시오. http://nmap.org/download.html
#####Windows
enip-enumerate.nse를 다운로드한 후에는 NSE Scripts 디렉터리로 이동해야 합니다. 이 작업은 관리자 권한으로 수행해야 합니다. 시작 -> 프로그램 -> 보조프로그램으로 이동하여 '명령 프롬프트'를 마우스 오른쪽 버튼으로 클릭하십시오. '관리자 권한으로 실행'을 선택하십시오.
move codesys-v2-discover.nse C:\Program Files (x86)\Nmap\scripts
#####Linux
enip-enumerate.nse를 다운로드한 후에는 NSE Scripts 디렉터리로 이동해야 합니다. 이 작업은 sudo/root 권한으로 수행해야 합니다.
sudo mv codesys-v2-discover.nse /usr/share/nmap/scripts
####사용법
터미널 창/명령 프롬프트에서 다음 명령 중 하나를 사용하십시오. 여기서 는 EtherNet/IP를 스캔하려는 대상입니다.
Windows: nmap -p 1200,2455 --script codesys-v2-discover <host>
Linux: sudo nmap -p 1200,2455 --script codesys-v2-discover <host>
####참고 사항
이 스크립트의 공식 버전은 다음에서 유지 관리됩니다:https://github.com/digitalbond/Redpoint/codesys-v2-discover.nse
이 스크립트는 열린 모든 포트에 CoDeSys 요청을 보내려고 시도합니다. 대부분의 컨트롤러는 표준 포트 1200 또는 2455를 사용하지만, 일부 컨트롤러는 1201, 1217 등 대체 포트를 사용합니다.
== ###enip-enumerate.nse ![enip-enumerate 샘플 출력] (http://digibond.wpengine.netdna-cdn.com/wp-content/uploads/2014/04/enip.png)
####저자
Stephen Hilt
Digital Bond, Inc
####목적 및 설명