home

기술동향칼럼

XILINX 칩을 중심으로 살펴본 FPGA 역 공학 기술
Reverse Engineering Technique for XILINX FPGA Chips

유호영 교수  | 충남대학교 전자공학과

최소연 석사과정  | 충남대학교 전자전파정보통신공학과

1. 서 론

  FPGA (Field Programmable Gate Array)는 제조공정 이후에 설계의 변경이 불가능한 ASIC (Application Specific Integrated Circuit)과는 달리 회로의 추가 및 변경이 가능하기 때문에 일반적으로 개발기간이 짧고 초기 개발비가 저렴하며 시장의 요구에 유연하게 대응할 수 있다는 장점이 있다 [1]. 제작 방식에 따라 SRAM, FLASH, FUSE 기반의 FPGA가 존재하며, 2020년 기준으로 제조원가, 공정, 프로그래밍 속도 등의 이점으로 SRAM 기반 FPGA가 전체 시장의 70% 이상의 점유율을 차지하고 있다. 그러나 SRAM 기반 FPGA는 SRAM이 휘발성 메모리라는 특성으로 인하여, 시스템을 구성할 때 FPGA 내부 회로의 구성 정보를 저장하는 비 휘발성 메모리가 추가적으로 필요하다. 시스템 전원이 켜질 때 마다 회로의 구성 정보를 포함하는 비트스트림이 비 휘발성 메모리로부터 FPGA로 전송되어야 하기 때문에, SRAM 기반 FPGA는 태생적으로 보안에 취약할 수 밖에 없다. 하드웨어 Trojan과 같은 악의적인 회로 변형을 검출하고 FPGA를 포함하는 시스템의 보안을 강화하기 위하여, 최신 FPGA 기반 역 공학 기술을 이해하는 것이 반드시 필요하다. 2008년도부터 SRAM기반 FPGA 역 공학 연구는 활발하게 진행되고 있으며, 역 공학 복원율을 점진적으로 향상시켜 80% 수준까지 도달하였다 [2]–[6]. 본 고에서는 가장 널리 사용되는 XILINX사의 FPGA를 중심으로 역 공학 기술의 기본적인 방법을 소개한다. 이를 통해 독자들에게 FPGA 구조에 대한 이해를 높이고 역 공학 기술의 중요성을 강조 하고자 한다.

[그림 1] FPGA 내부 구조

[그림 1] FPGA 내부 구조

  우선 FPGA의 기본 구조에 대하여 살펴보자. 일반적으로 FPGA는 그림 1과 같이 논리블록 (Configurable Logic Block, CLB), 연결 블록(Switch Matrix, SM), 입출력블록 (Input/Output Block, IOB)으로 구성된다. 논리블록 (CLB)은 FPGA의 가장 기본이 되는 블록으로 논리 기능과 저장 기능을 제공한다. 연결블록 (SM)은 칩 내부 블록 간의 연결을 담당하며, 입출력블록은 칩 외부 입력과 출력을 제어한다. 그림 2는 각 세부 블록을 상세하게 기술하고 있다. 각 세부 블록에는 설계자의 요구에 따라 FPGA 내부 회로를 변경할 수 있도록 세 가지 종류의 Programmable Point를 포함한다. PLP (Programmable Logic Point)는 회로의 논리적 기능을 결정하며, PIP (Programmable Interconnect Point)는 내부 연결을 선택하고, PCP (Programmable Contents Point)는 저장된 값을 유지한다. 예를 들어, 그림2의 논리블록에서 가장 우측에 배치된 PLP에 의해 해당 논리블록이 LUT로 동작할지 FF으로 동작할지가 결정된다. 이와 유사한 방법으로 각 Programmable Point에 저장된 값들에 의해 FPGA의 내부 연결 및 저장된 값이 선택된다. 앞서 기술한 바와 같이 SRAM 기반 FPGA는 모든 Programmable Point의 값들을 SRAM에 저장하기 때문에 효율적인 보안 방안이 요구된다.

[그림 2] FPGA 칩 구조

[그림 2] FPGA 칩 구조

2. XILINX FPGA 디자인 개발 도구

  XILINX 사는 설계자가 개발한 디자인을 FPGA 칩에 프로그램 할 수 있도록 ISE design suite와 VIVADO design suite의 디자인 개발 통합 환경을 제공한다. ISE design suite는 XILINX FPGA 7 시리즈 이전 버전의 칩을 지원하고, VIVADO design suite는 7 시리즈 이후 버전의 칩을 지원한다. 현재까지 개발된 대부분의 역 공학 도구들이 ISE design suite를 기반으로 개발되어 있고 역 공학에 활용한 다양한 자료를 제공하므로, 본 고에서는 ISE design suite를 중심으로 역 공학을 설명한다. 그림 3과 같이 ISE design suite는 설계 RTL 디자인을 합성하고 배선/배치한 후 프로그램을 진행한다. 이때 생성되는 파일들은 표 1에서 확인할 수 있다. 특히, ISE design suite 기반의 XILINX FPGA 역 공학을 이해하기 위해서는 XDLRC (XILINX Design Language Routing and Configurable Logic Block) 파일과 XDL (XILINX Design Language) 파일을 상세히 이해해야 한다.

[그림 3] XILINX ISE design suite 흐름도

[그림 3] XILINX ISE design suite 흐름도

[표 1] XILINX ISE design suite에서 생성되는 파일

종 류 약 자 형 태 설 명
Native Generic Database NGD Binary 입력된 RTL 디자인을 Generic한 게이트로 합성하여 표현한 파일
Native Circuit Description NCD Binary NGD 파일의 Generic한 게이트를 목표 FPGA로 매핑한 Netlist 파일
XILINX Design Language XDL Text 이진수로 표현된 NCD 파일을 읽기 가능한 텍스트 형태로 기술한 파일
XILINX Design Language Routing and Configurable Logic Block XDLRC Text 목표 FPGA의 칩 구성과 활용 가능한 모든 하드웨어 자원을 기술한 파일
Bit stream File BIT Binary NCD 파일을 비트스트림으로 변환한 파일
Configuration Memory File MCS Binary 외부 메모리인 PROM에 저장 가능한형태로 BIT 파일을 변환한 파일

(1) XILINX Design Language Routing and Configurable Logic Block (XDLRC)

  XDLRC 파일은 설계 디자인이 프로그램 될 목표 FPGA의 칩 구성 정보와 활용 가능한 모든 내부 하드웨어 자원에 대한 내용을 기술하고 있다. XDLRC 파일은 그림 4와 같이 TILE, PRIMITIVE, ELEMENT 순으로 계층적으로 설명되어 있으며, 상위 계층의 종류에 따라 하위 계층의 내부 하드웨어 자원이 달라진다. 예를 들어 앞서 설명한 CLB 종류의 TILE과 IOB 종류의 TILE은 다른 종류의 PRIMITIVE와 ELEMENT를 가지며 이를 통해 각 TILE은 다른 기능을 제공할 수 있다. 또한, XDLRC 파일은 각 계층별로 활용 가능한 하드웨어 자원을 고정형 하드웨어 자원과 가변형 하드웨어 자원으로 구별하여 기술한다. 그림 4에서 TILE내 WIRE와 ELEMENT 내 CONN은 고정된 하드웨어 자원이며, TILE내 PIP와 ELEMENT 내 PLP는 설계자에 의해 변경 가능한 가변형 하드웨어 자원이다. 고정형 하드웨어 자원은 그대로 유지한 채 가변형 하드웨어 자원을 선택적으로 선정하여 최종적으로 설계자는 원하는 회로를 구성할 수 있다.

[그림 4] XDLRC 세부 내용

[그림 4] XDLRC 세부 내용

(2) XILINX Design Language (XDL)

  XDL 파일은 XDLRC 파일에 기술된 모든 가변형 하드웨어 자원 중 설계 디자인에 사용된 가변형 하드웨어 자원만을 기술한다. 고정형 하드웨어 자원은 목표 FPGA의 선정에 의해 결정되는 요소이기 때문에 XDL 파일에서는 중복적으로 기술되지 않는다. 결론적으로 목표 FPGA 칩의 종류와 XDL 파일을 활용하면 설계자가 디자인한 회로를 완벽하게 구현할 수 있다. 그림 5는 빨간 색으로 강조된 가변형 하드웨어 자원의 정보를 통해 전체 내부 회로의 구성이 가능함을 예로 보여준다.

[그림 5] XDL 세부 내용

[그림 5] XDL 세부 내용

3. Xilinx FPGA 역 공학

  XILINX FPGA 역 공학의 목표는 비 휘발성 메모리에서 FPGA로 전송되는 비트스트림을 추출하여 설계자가 활용한 가변형 하드웨어 자원을 완벽하게 복원하는 것이다. 이를 위해 우선 비트스트림의 각 비트와 가변형 하드웨어 사이의 매핑 관계를 분석해야 한다. 이후 매핑 테이블을 활용하여 입력 비트스트림의 복원 과정을 진행한다.

(1) 매핑 테이블 생성

  가변형 하드웨어 자원은 Programmable Point로 나타나며 Programmable Point의 옵션에 따라 가변형 하드웨어 자원의 동작이 결정된다. 예를 들어 그림 2의 PLP는 하나의 Programmable Point가 되고 논리블록의 가변형 하드웨어가 변경될 수 있는 LUT과 FF는 해당 PLP의 옵션이 된다. 따라서 비트스트림의 각 비트의 의미를 유추하기 위해서는 PLP, PIP, PCP를 포함하는 모든 Programmable Point의 모든 옵션이 어떠한 비트로 표현되는 지를 조사하여야 한다. XDLRC 파일을 참고하여 Programmable Point 별로 구성 가능한 모든 옵션에 해당하는 XDL 파일과 BIT 파일을 생성하여 분석을 진행한다. 이때 생성해야하는 XDL 파일과 BIT 파일의 수는 목표 FPGA가 가지는 전체 옵션의 수와 동일한데, 저 사양의 XILINX SPARTAN3의 경우에도 PLP는 수 백 개, PIP는 수 천 개 이상이 요구된다. 효율적인 역 공학을 위해서 파일 생성과 비교하는 자동화 프로그램을 만드는 것이 바람직하다. 그림 6은 매핑 테이블 구성에 활용된 XDL 생성 프로그램과 비트 비교 프로그램을 보여준다. 이를 활용하면 모든 옵션에 의해 나타나는 비트의 위치와 값을 자동으로 생성할 수 있다.

[그림 6] 매핑 테이블 자동화 프로그램

[그림 6] 매핑 테이블 자동화 프로그램

(2) XDL 파일 복원

  다음 단계로 복원하고자 하는 비트스트림을 입력으로 받아 매핑 테이블을 활용하여 가변형 하드웨어 자원이 기술된 XDL 파일의 복원을 진행한다. 비트 스트림 내 각 비트가 어떠한 Programmable Point의 옵션을 의미하는 지를 결정할 수 있다. 하지만 모든 비트와 Programmable Point가 단순하게 일대일 대응이 되는 것이 아니기 때문에 여러 옵션 간의 상관 관계를 파악하여 결정을 진행하여야 한다. 또한, 빠른 복원을 위하여 매핑 테이블 자동화 프로그램과 같이 복원 과정 또한 일반적으로 자동화 프로그램을 구현하여 활용한다. 끝으로 그림 7은 XILINX SPARTAN3계열의 FPGA칩에 구현된 64비트 LFSR 회로를 역 공학 기술을 통해 복원한 예시를 보여준다. 이진 파일로 표현되는 NCD 파일을 그래픽 하게 표현한 그림으로 원본 NCD와 복원 NCD가 육안으로는 거의 동일하게 나타나며, 실제 비트 단위 복원율은 88 %임을 확인하였다.

[그림 7] 목표 회로와 복원 회로의 구성 비교

[그림 7] 목표 회로와 복원 회로의 구성 비교

4. 결 론

  본 고에서는 FPGA의 기본 구조와 Xilinx ISE design suite의 이해를 바탕으로 XILINX FPGA 역 공학의 기본 동작에 대하여 알아보았다. 최근 발표된 다수의 역 공학 논문들이 100 % 복원율을 주장하고 있지만, 실제 복원율 산출에 있어서 배제된 요소들이 많아 복원율을 그대로 받아 들이기 힘들다. 또한, 복원된 회로와 목표 회로 사이의 동작의 재현성에 대한 추가적인 연구가 필요하므로 아직 완벽한 복원을 위해서는 심도 깊은 노력이 필요한 것으로 판단된다.

참고문헌
  • [1]M. Wirthlin, "High-Reliability FPGA-Based Systems: Space, High-Energy Physics, and Beyond," in Proceedings of the IEEE, vol. 103, no. 3, pp. 379-389, March 2015.
  • [2]H. Yu, H. Lee, S. Lee, Y. Kim, and H.-M. Lee, "Recent Advances in FPGA Reverse Engineering," Electronics, vol. 7, no. 10, 2018.
  • [3]T. Zhang, J. Wang, S. Guo, and Z. Chen, "A Comprehensive FPGA Reverse Engineering Tool-Chain: From Bitstream to RTL Code," IEEE Access, vol. 7, pp. 38379-38389, 2019.
  • [4]J.-B. Note and É. Rannaud, "From the bitstream to the netlist," in Proc. 16th Int. ACM/SIGDA Symp. FPGA, vol. 8, pp. 264-264, 2008.
  • [5]F. Benz, A. Seffrin, and S. A. Huss, "Bil: A tool-chain for bitstream reverse-engineering," in 22th International Conference on Field Programmable Logic and Applications (FPL), Aug. 2012, pp. 735-738.
  • [6]Z. Ding, Q. Wu, Y. Zhang, and L. Zhu, "Deriving an NCD file from an FPGA bitstream: Methodology, architecture and evaluation," Microprocessors and Microsystems, vol. 37, no. 3, pp. 299-312, 2013.
상단으로