본문 바로가기

Layer7

하드웨어 3, 4차시 과제(SoC, 하드웨어 인터페이스, 펌웨어, 논리회로, 펌웨어 획득, 펌웨어 이미지 분석)

https://hwan-shell.tistory.com/92

SoC

 

System on a Chip의 약자로 여러 가지 반도체 부품이 하나로 직접 되는 기술 및 제품을 말한다.

직접: 중간에 제삼자나 매개물이 없이 바로 연결되는 관계.

전체 시스템을 칩 하나에 담은 기술집약적 반도체라고도 한다. 한마디로 여러 기능을 가진 기기들로 구성된 시스템을 하나의 칩으로 만드는 기술이다. 일반적으로 멀티 칩 시스템보다 소비하는 전력이 적고 조립 비용이 저렴하다는 장점이 있다.

SoC의 구조는 다음과 같다.

  • 마이크로컨트롤러, 마이크로프로세서 등과 같은 디지털 신호 처리기 코어 
  • RAM, ROM 등과 같은 플래시 메모리 칩셋
  • GPS, 진동자와 같은 위치 및 위성 시스템
  • CPU, GPU와 같은 연산 및 시뮬레이션 구현을 위한 칩셋
  • 모뎀, 전화, SMS를 이용하기 위해 연동된 시스템 칩셋

 

 

https://better-together.tistory.com/155

하드웨어 인터페이스

 

컴퓨터 정보 기기의 하드웨어 간 통신을 위해서 존재하고,

입출력 포트의 전기적 연결 장치인 커넥터(connector), 신호의 송수신 방법(프로토콜) 등을 말한다. 

컴퓨터 내부 장치나 구성 요소 간의 상호 접속을 가능하게 하는 플러그, 커넥터, 카드 등이 하드웨어 인터페이스에 속한다.

컴퓨터 관련 버스, 저장장치 및 다양한 입출력 기기들 내에 존재하며,

데이터의 일부를 동시에 전달하는 병렬연결 또는 데이터가 한 번에 한 비트씩 전송되는 직렬 연결과 병행될 수 있다.

종류로는 USB(Universal Serial Bus)와 같은 직렬 커넥터, RS-232C와 같은 통신용 직렬 인터페이스, SCSI와 같은 병렬 인터페이스 장치 등이 있다. 

 

 

https://www.addictivetips.com/software/what-is-firmware/

펌웨어

 

하드웨어와 소프트웨어의 특성을 동시에 가지고 있으며, 다른 소프트웨어들보다 우선적으로 하드웨어의 기본적인 동작을 제어할 수 있는 기능을 가지고 있는 소프트웨어이다. 대표적으로 운영체제(OS)가 있고 펌웨어가 없거나 이상이 생기면 해당 기기는 벽돌이 된다.  소프트웨어의 기능을 펌웨어로 변경하면 속도가 증가하고, 하드웨어의 기능을 펌웨어로 변경하면 저렴하고 편리하게 구현이 가능하다. EPROM에 기록되며 하드웨어보다는 교환이 쉽지만 소프트웨어에 비해 교환이 어렵다. 펌웨어의 구조는 다음과 같다.

  • boot loader : 하드웨어 부팅에 필요한 기본 요소
  • kernel : 운영체제의 커널과 같은 역할을 수행하는 영역
  • file system : 펌웨어의 기능이 포함되어 있는 영역
  • other : 데이터 저장 공간 등 기타 영역

 

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=pusna25&logNo=100112058544

논리회로

 

논리 회로(logic gate)는 불 대수(수학이나 논리학 등에서 증명이 없이 자명한 진리, 다른 명제를 증명하는데 전제되는 원리)를 물리적 장치에 구현한 것으로, 하나 이상의 논리적 입력값에 대해 논리 연산을 수행하여 하나의 논리적 출력 값을 얻는 전자 회로를 말한다. (논리곱) AND, (논리합) OR, (논리 부정) NOT의 기본 불 대수를 수행하며, 이 기본 불 대수들의 결합으로 복합적인 논리 기능을 수행한다.

 

 

펌웨어 획득

 

제조사 사이트에서 다운로드

몇몇 임베디드 제조사의 사이트에 공개된 펌웨어를 다운로드할 수 있다.

하지만, 업데이트 펌웨어가 들어가 있는 경우가 많아서 모든 펌웨어 내용을 보기는 어렵다.

덤프(Dump), Read
플래시롬에 저장된 프로그램 코드를 빼내어 오는 덤프(Dump), Read 기능 등이 있다. 

업데이트 패킷 스니핑

네트워크 해킹 기법 중 하나인 스니핑(Sniffing) 기법(통신 패킷을 도청하는 기법)을 이용해서

임베디드 장비가 펌웨어 업데이트를 할 때, 업데이트 패킷을 스니핑 해서 업데이트 파일을 획득하는 방법이다.

UART Port 접속

UART Port는 개발자들이 Debug 메시지를 확인하는 용도로 사용하기 때문에

바로 쉘을 얻을 수도 있고 중요한 시스템 메시지를 확인할 수 있어서

하드웨어 해킹에 유용하게 쓰인다.

 

Flash Memory Dump

직접 플래시 메모리를 떼거나 핀에 선을 연결해서 펌웨어를 추출하는 방법이다.

 

JTAG Port 접속

UART와 비슷하지만, JTAG(임베디드 개발 시에 사용하는 Debug port)으로 바로 펌웨어를 획득할 수도 있고 Debugging 기능도 지원한다.

논리적 취약점을 이용한 펌웨어 추출

논리적인 취약점을 이용해서 쉘을 얻고 쉘을 이용해서 펌웨어에 접근하는 방법이다.

 

 

펌웨어 이미지 분석

펌웨어 이미지 분석은 attifyOS상에서 분석하는 방법과, ubuntu 상에서 fat을 이용해서 가상으로 구동하여 분석하는 방법이 있다.

attifyOS는 IoT 장비를 전문적으로 분석할 수 있는 툴들이 기본적으로 많이 설치되어 있고 ubuntu 기반이다.

binwalk를 이용하여 분석을 진행하는데, 펌웨어 파일의 구성을 분석할 수 있는 툴로

파일 시그니처를 사용해서 어떤 데이터가 들어있는지 확인해준다.

 

파일 시그니쳐 분석 ( -B)

펌웨어 데이터는 각각 고유의 시그니쳐를 가지고 있기 때문에 시그니쳐 분석을 하면 해당 펌웨어가 어떤 데이터나 파일 시스템을 쓰고 있는지에 대한 대강의 정보를 알 수 있다.

 

펌웨어의 아키텍처 식별( -A)

펌웨어의 아키텍처를 식별하려면 -A옵션을 주면 된다.

 

펌웨어 엔트로피 분석(-E)

펌웨어 구조가 어떻게 되어 있는지 대략적인 위치 파악을 시각적으로 알 수 있다.

 

 

펌웨어 파일 추출(-e)

펌웨어 내부에 알려진 파일 타입을 추출한다.

 

fat데이터 구조체 타입수가 적기 때문에 간단한 파일 시스템이다.

FAT12, FAT 16, FAT32 등 3개의 다른 버전이 있다. 

 

FAT 파일 시스템은 3개의 물리적인 구역을 갖는데,

첫 번째 영역은 '예약된 영역'으로서 파일 시스템의 포함한다.

FAT12와 FAT 16에서 이 영역의 크기는 전형적으로 1 섹터이지만, 부트섹터에서 그 크기를 정한다.

두 번째 영역은 'FAT 영역'이고 이는 주 FAT영역, 부 FAT영역, 백업 FAT영역을 포함한다. 

세 번째 영역은 '데이터 영역'으로서 파일과 디렉터리 내용을 저장하는 클러스터를 포함한다.

 

분석의 목적은 더 상세한 분석을 위해 파일 시스템 레이아웃과 세부적인 설정들을 결정하는 것이다.

이 과정에서 디스크 포맷 운영체제라던지, 숨겨진 데이터 증거를 발견할 수 있다.

FAT파일 시스템 설정을 파악하기 위해 부트섹터 위치를 파악하고 처리해야 한다.

부트섹터는 파일시스템 첫 섹터에 위치하고 기본 엔트리를 갖기 때문에 다른 구조체들에 비해 간단한 편이다. 

부트섹터 정보를 이용해서 예약된 영역, FAT 영역, 데이터 영역 위치를 계산하고,

FAT32 FSINFO 데이터 구조체는 최근 활동에 대한 실마리를 제공하고 그 위치는 부트섹터에서 제공한다. (FAT FSINFO 데이터 구조체는 섹터 1에 위치한다.)