
HAL [/hel/]은 포괄적인 넷리스트 리버스 엔지니어링 및 조작 프레임워크입니다.
사실상 넷리스트 분석에 관한 모든 연구는 검사 대상 넷리스트를 그래프 기반으로 표현한 것을 사용합니다. HAL의 핵심은 바로 이것입니다: FPGA나 ASIC 등 다양한 소스의 넷리스트를 그래프 기반 넷리스트 표현으로 파싱하고, 포함된 게이트와 넷의 탐색 및 분석에 필요한 내장 도구를 제공하는 프레임워크입니다.
우리의 비전은 HAL이 IDA나 Ghidra와 같은 도구에 해당하는 하드웨어 리버스 엔지니어링 도구가 되는 것입니다. HAL이 연구자와 분석가를 위한 공통 기준점을 제공하여 연구 결과의 재현성을 높이고 넷리스트 파싱과 같은 반복적인 기본 작업을 추상화할 수 있기를 바랍니다.
HAL은 Max Planck Institute for Security and Privacy의 Embedded Security 그룹에서 활발히 개발되고 있습니다. 여러 연구 프로젝트 외에도, Ruhr University Bochum (RUB)의 대학 강의 "Einführung ins Hardware Reverse Engineering" (하드웨어 리버스 엔지니어링 입문)에서도 사용되고 있습니다.
또한, 넷리스트 리버스 엔지니어링 기술 평가를 위한 최신 상태의 벤치마크 회로 세트를 별도의 저장소에서 제공하고 있습니다.
이 저장소에는 선별된 플러그인 모음이 포함되어 있습니다:
liberty 게이트 라이브러리 형식의 임의 게이트 라이브러리 지원 추가사용자 관점에서 HAL 기능에 대한 포괄적인 문서는 Wiki에서 제공됩니다. 또한 전체 C++ API 및 Python API 문서도 제공합니다.
HAL 빌드 방법에 대한 지침은 Wiki의 해당 페이지를 참조하십시오.
HAL을 설치하거나 빌드하고 hal -g로 GUI를 시작하십시오. 모든 옵션은 hal [--help|-h]로 확인할 수 있습니다.
examples 하위 디렉토리에 몇 가지 예제 프로젝트를 포함했습니다. 예제 프로젝트를 시작하려면 메인 메뉴에서 Import Project를 통해 가져오거나 Welcome Screen의 OPEN PROJECT 영역에 압축 파일을 드롭하여 가져올 수 있습니다.
가져오기를 하면 쓰기 권한이 있는 디렉토리 선택을 요청하는 팝업이 나타나며, HAL이 그곳에 프로젝트 디렉토리를 생성하고 파일을 압축 해제합니다.
압축 해제시 외부 도구를 사용하지 마십시오. 다음에 프로젝트를 열 때 넷리스트와 게이트 라이브러리를 찾을 수 있도록 조정이 이루어집니다.
자체 Verlog 또는 VHDL 넷리스트를 열려면 대신 Import Netlist를 실행해야 합니다. 이는 plugins/gate_libraries/definitions에 일치하는 게이트 라이브러리가 있거나 수동으로 게이트 라이브러리를 제공하는 경우에만 작동합니다.
자체 게이트 라이브러리 생성 지침 및 기타 유용한 튜토리얼은 wiki를 참조하십시오.
다음 예제 코드는 fsm 예제를 참조합니다.
통합 Python 셸 또는 Python 스크립트 창을 사용하여 상호 작용하십시오. 두 기능 모두 (제한된) 자동 완성 기능을 제공합니다.
모든 룩업 테이블을 나열하고 해당 부울 함수를 출력해 보겠습니다:
for gate in netlist.get_gates():
if "LUT" in gate.type.name:
print("{} (id {}, type {})".format(gate.name, gate.id, gate.type.name))
print(" {}-to-{} LUT".format(len(gate.type.input_pins), len(gate.type.output_pins)))
boolean_functions = gate.boolean_functions
for name in boolean_functions:
print(" {}: {}".format(name, boolean_functions[name]))
print("")
예제 넷리스트 fsm.vhd에 대해 다음과 같이 출력됩니다:
FSM_sequential_STATE_REG_0_i_3_inst (id 4, type LUT6)
6-to-1 LUT
O: (!I1 & !I2 & I3 & !I4 & I5) | (I0 & !I2) | (I0 & I1) | (I0 & I3) | (I0 & I4) | (I0 & I5)
FSM_sequential_STATE_REG_0_i_2_inst (id 3, type LUT6)
6-to-1 LUT
O: (I2 & I3 & I4 & !I5) | (I1 & !I5) | (I1 & !I4) | (I1 & !I3) | (I0 & I1) | (I1 & I2)
FSM_sequential_STATE_REG_1_i_3_inst (id 6, type LUT6)
6-to-1 LUT
O: (!I1 & I4 & !I5) | (!I1 & !I3 & I4) | (I0 & I4 & !I5) | (I0 & !I3 & I4) | (!I1 & I2 & I4) | (I0 & I2 & I4) | (!I2 & !I5) | (!I2 & !I4) | (!I2 & !I3) | (!I0 & !I4) | (!I0 & !I2) | (!I0 & !I1) | (I1 & !I4) | (I1 & !I2) | (I0 & I1) | (I3 & !I5) | (I3 & !I4) | (!I0 & I3) | (I1 & I3) | (I2 & I3) | (!I4 & I5) | (!I3 & I5) | (!I0 & I5) | (I1 & I5) | (I2 & I5)
FSM_sequential_STATE_REG_1_i_2_inst (id 5, type LUT6)
6-to-1 LUT
O: (!I0 & I1 & !I2 & I3 & I4 & !I5) | (I0 & !I2 & I3 & I4 & I5)
OUTPUT_BUF_0_inst_i_1_inst (id 18, type LUT1)
1-to-1 LUT
O: !I0
OUTPUT_BUF_1_inst_i_1_inst (id 20, type LUT2)
2-to-1 LUT
O: (I0 & !I1) | (!I0 & I1)
HAL 개발에 기여해 주셔도 좋습니다. Github를 통해 새로운 풀 리퀘스트를 제출해 주십시오.
제출 전에 정적 검사와 clang format을 실행해 주시기 바랍니다.
또한 커밋 전에 이러한 검사를 git hook으로 설치할 수도 있습니다.
clang-format hook을 설치하려면 git-hooks를 설치하고 다음을 실행하십시오:
git hooks --install
Docker 빌드는 다음 명령으로 시작합니다:
docker-compose run --rm hal-build
git log $(git describe --tags --abbrev=0)..HEAD --pretty=format:"%s" --no-merges
학술적 맥락에서 HAL을 사용하실 경우 아래 참고문헌을 인용해 주십시오:
@misc{hal,
author = {{Embedded Security Group}},
publisher = {{Max Planck Institute for Security and Privacy}},
title = {{HAL - The Hardware Analyzer}},
year = {2019},
howpublished = {\url{https://github.com/emsec/hal}},
}
원본 논문도 포함하셔도 됩니다. 단, HAL은 논문에 설명된 원래 프로토타입 이후 크게 변경되었음을 알려드립니다. 따라서 위 항목을 인용해 주시기를 권장합니다.
@article{2018:Fyrbiak:HAL,
author = {Marc Fyrbiak and Sebastian Wallat and Pawel Swierczynski and Max Hoffmann and Sebastian Hoppach and Matthias Wilhelm and Tobias Weidlich and Russell Tessier and Christof Paar},
title = {{HAL-} The Missing Piece of the Puzzle for Hardware Reverse Engineering, Trojan Detection and Insertion},
journal = {IEEE Transactions on Dependable and Secure Computing},
year = {2018},
publisher = {IEEE},
howpublished = {\url{https://github.com/emsec/hal}}
}
HAL로 해결하고자 하는 과제에 대한 개요는 36C3에서의 발표를 시청하시기 바랍니다.
HAL은 다른 연구 그룹과의 협업 및 업계의 기여를 장려하기 위해 MIT 라이선스로 제공됩니다. 자세한 내용은 라이선스 파일을 참조하십시오.
HAL은 최대 알파 품질의 소프트웨어입니다. 사용에 따른 책임은 사용자 본인에게 있습니다. 당사는 당사 툴킷의 악의적인 사용을 권장하지 않습니다.