펌웨어

[섬네일|오른쪽|펌웨어는 일반적으로 [EEPROM 또는 플래시 메모리에 저장된다. 여기서는 SPI와 같은 I/O 프로토콜을 사용한다.]]

컴퓨팅에서 **펌웨어**(firmware)는 컴퓨팅 장치 하드웨어에 저수준 제어를 제공하는 소프트웨어이다. 상대적으로 간단한 장치의 경우, 펌웨어는 모든 제어, 모니터링 및 데이터 조작 기능을 수행할 수 있다. 더 복잡한 장치의 경우, 펌웨어는 상대적으로 저수준 제어뿐만 아니라 운영체제와 같은 상위 수준 소프트웨어에 하드웨어 추상화 서비스를 제공할 수 있다.

펌웨어는 개인용 컴퓨터, 스마트폰, 가전제품, 차량, 컴퓨터 주변기기 및 이러한 대규모 시스템 내의 많은 집적 회로를 포함한 광범위한 컴퓨팅 장치에서 발견된다.

펌웨어는 비휘발성 메모리에 저장된다.  고정 기억 장치 (ROM) 또는 EPROM, EEPROM, 플래시와 같은 프로그래밍 가능한 메모리에 저장된다. ROM에 저장된 장치의 펌웨어를 변경하려면 메모리 칩을 물리적으로 교체해야 한다.  일부 칩은 제조 후 제거하도록 설계되지 않았다. 프로그래밍 가능한 펌웨어 메모리는 플래싱이라고 불리는 절차를 통해 재프로그래밍할 수 있다.

펌웨어를 변경하는 일반적인 이유는 버그를 수정하고 기능을 추가하기 위함이다.

## 역사와 어원
아셔 오플러는 1967년 데이터메이션 기사에서 펌웨어라는 용어를 하드웨어와 소프트웨어 사이의 중간 용어로 사용했다. 오플러는 4세대 컴퓨터 시스템이 쓰기 가능한 제어 저장소 (작고 특화된 고속 메모리)를 가질 것이며, 여기에 마이크로코드 펌웨어가 로드될 것이라고 예상했다. 많은 소프트웨어 기능이 마이크로코드로 이동하고, 명령어 집합은 맞춤형으로 변경될 수 있으며, 다양한 펌웨어가 다른 명령어 집합을 위해 로드될 수 있었다.

컴퓨터가 복잡해지기 시작하면서, 사용자의 재량에 따라 더 복잡한 프로그램을 실행하는 데 필요한 일관된 환경을 제공하기 위해 다양한 프로그램이 먼저 시작되고 실행되어야 한다는 것이 분명해졌다. 이를 위해서는 컴퓨터가 이러한 프로그램을 자동으로 실행하도록 프로그래밍해야 했다. 또한, 기업, 대학 및 마케터들이 기술 지식이 거의 없는 일반인들에게 컴퓨터를 판매하고 싶어함에 따라, 일반 사용자가 실용적인 목적으로 프로그램을 쉽게 실행할 수 있도록 더 큰 자동화가 필요해졌다. 이로 인해 사용자가 의식적으로 실행하지 않으며, 일반 사용자가 알지도 못하는 종류의 소프트웨어가 등장했다.

원래 사용된 펌웨어는 하드웨어(CPU 자체) 및 소프트웨어(CPU에서 실행되는 일반 명령어)와 대비되었다. 펌웨어는 CPU 기계 명령어가 아니라 기계 명령어 구현에 관련된 저수준 마이크로코드로 구성되었다. 펌웨어는 하드웨어와 소프트웨어 사이의 경계에 존재했으며, 따라서 펌웨어라는 이름이 붙었다. 시간이 지나면서 대중적인 사용은 PC의 바이오스, 스마트폰의 부트 펌웨어, 컴퓨터 주변기기, 또는 전자레인지 및 리모컨과 같은 간단한 소비자 전자제품의 제어 시스템을 포함하여 하드웨어와 밀접하게 연결된 모든 컴퓨터 프로그램을 지칭하도록 펌웨어라는 단어를 확장했다.

## 적용 분야

### 컴퓨터
[섬네일|오른쪽|[베이비 AT 메인보드의 ROM 바이오스 펌웨어]]

어떤 면에서는 다양한 펌웨어 구성 요소가 작동하는 컴퓨터의 운영체제만큼 중요하다. 그러나 대부분의 최신 운영체제와 달리 펌웨어는 장치 출하 후 감지된 기능 문제를 해결하기 위해 자체적으로 업데이트하는 잘 발달된 자동 메커니즘을 거의 가지고 있지 않다.

컴퓨터의 펌웨어는 작은 유틸리티 프로그램을 통해 사용자가 수동으로 업데이트할 수 있다. 반면, 대용량 저장 장치(하드 디스크 드라이브, 광학 디스크 드라이브, 플래시 메모리 저장 장치(예: 솔리드 스테이트 드라이브))의 펌웨어는 플래시 메모리(ROM, EEPROM 대신)가 펌웨어에 사용되더라도 업데이트가 덜 자주 이루어진다.

대부분의 컴퓨터 주변기기는 그 자체로 특수 목적의 컴퓨터이다. 프린터, 스캐너, 웹캠, USB 플래시 드라이브와 같은 장치는 내부에 펌웨어가 저장되어 있으며, 일부 장치는 펌웨어의 현장 업그레이드를 허용하기도 한다. USB 키보드, USB 마우스, USB 사운드 카드와 같은 최신 간단한 장치의 경우, 펌웨어를 별도의 EEPROM 칩에 저장하는 대신 장치의 마이크로컨트롤러 내 온칩 메모리에 저장하는 추세이다.

컴퓨터 펌웨어의 예는 다음과 같다.
* PC에서 사용되는 바이오스 펌웨어
* 아이테니엄 시스템, 인텔 기반 맥, 그리고 많은 최신 PC에서 사용되는 (U)EFI 호환 펌웨어
* 하드 디스크 드라이브, 솔리드 스테이트 드라이브, 광학 디스크 드라이브 및 광학 디스크 레코더 펌웨어
* 그래픽 카드의 비디오 바이오스
* 썬 마이크로시스템즈와 오라클 (기업)의 SPARC 기반 컴퓨터, 애플의 파워PC 기반 컴퓨터, 제네시의 컴퓨터에서 사용되는 오픈 펌웨어
* 실리콘 그래픽스의 컴퓨터에서 사용되는 ARCS
* 아미가 컴퓨터 라인에서 사용되는 킥스타트 (POST, 하드웨어 초기화 + 플러그 앤 플레이 자동 구성 주변기기, 커널 등)
* IBM의 시스템 i 및 시스템 p 컴퓨터에서 사용되는 RTAS (Run-Time Abstraction Services)
* 브로드컴 시스템 온 칩 (SoC)용 공통 펌웨어 환경 (CFE)
[섬네일|[인스탁스|후지 인스탁스 카메라의 펌웨어를 업데이트하는 모습]]

### 가정 및 개인용 제품
게임기, 디지털 카메라, 휴대용 음악 플레이어와 같은 가전제품은 펌웨어 업그레이드를 지원한다. 일부 회사는 새로운 재생 가능한 파일 형식(코덱)을 추가하기 위해 펌웨어 업데이트를 사용한다. 펌웨어 업데이트로 변경될 수 있는 다른 기능에는 GUI 또는 배터리 수명도 포함된다. 스마트폰은 새로운 기능을 추가하고 보안 문제를 패치하기 위한 오버 더 에어 펌웨어 업그레이드 기능을 가지고 있다.

### 자동차
1996년부터 대부분의 자동차는 온보드 컴퓨터와 다양한 센서를 사용하여 기계적 문제를 감지한다. 2010년 기준, 최신 차량은 컴퓨터 제어 ABS (ABS)와 컴퓨터 작동 변속기 제어 장치 (TCU)도 사용한다. 운전자는 또한 이러한 방식으로 운전 중 실시간 연비 및 타이어 압력 판독값과 같은 계기판 정보를 얻을 수 있다. 지역 딜러는 대부분의 차량 펌웨어를 업데이트할 수 있다.

### 기타 예시
다른 펌웨어 응용 프로그램은 다음과 같다.
* 가정 및 개인용 제품:
** 세탁기의 타이밍 및 제어 시스템
** 최신 텔레비전의 소리 및 비디오 속성, 채널 목록 제어
* 라우터, 스위치, 방화벽에서:
** LibreCMC 리눅스 리브레 커널 기반의 100% 자유 소프트웨어 라우터 배포판
** IPFire 리눅스 커널 기반의 오픈 소스 방화벽/라우터 배포판
** fli4l 리눅스 커널 기반의 오픈 소스 방화벽/라우터 배포판
** OpenWrt 리눅스 커널 기반의 오픈 소스 방화벽/라우터 배포판
** M0n0wall FreeBSD의 임베디드 방화벽 배포판
** 사유 펌웨어
* NAS 시스템에서:
** NAS4Free FreeBSD 기반의 오픈 소스 NAS 운영체제
** 오픈파일러 리눅스 커널 기반의 오픈 소스 NAS 운영체제
** 사유 펌웨어
* FPGA (FPGA) 코드는 펌웨어로 지칭될 수 있다.

## 플래싱
플래싱은 전자 장치에 존재하는 EEPROM 또는 플래시 메모리 모듈에 포함된 기존 펌웨어 또는 데이터를 새로운 데이터로 덮어쓰는 프로세스이다. 이는 장치를 업그레이드하거나 장치 기능과 관련된 서비스 제공자를 변경하는 것(예: 한 이동통신사에서 다른 이동통신사로 변경하거나 새 운영체제를 설치하는 것)을 위해 수행될 수 있다. 펌웨어를 업그레이드할 수 있는 경우, 이는 종종 제공자의 프로그램을 통해 이루어지며, 프로세스가 실패하거나 새 버전의 성능이 더 나쁠 경우 이전 펌웨어로 되돌릴 수 있도록 업그레이드 전에 이전 펌웨어를 저장할 수 있게 한다. Flashrom과 같은 공급업체 플래싱 도구의 자유 소프트웨어 대체품이 개발되었다.

## 펌웨어 해킹

때때로, 제3자는 새로운 기능을 제공하거나 숨겨진 기능을 잠금 해제하기 위해 비공식적인 새 버전 또는 수정된("애프터마켓") 펌웨어를 개발하는데, 이를 커스텀 펌웨어라고 한다. 예를 들어, 락박스는 휴대용 미디어 플레이어의 펌웨어 대체품이다. 다양한 장치에 대한 많은 홈브루 프로젝트가 있으며, 이는 종종 이전에 제한된 장치에서 범용 컴퓨팅 기능을 잠금 해제한다 (예: 아이팟에서 둠 실행).

펌웨어 해킹은 일반적으로 많은 장치의 펌웨어 업데이트 기능을 이용하여 스스로를 설치하거나 실행한다. 그러나 제조업체가 라이선스 없는 코드 실행을 막기 위해 하드웨어를 잠그려 했기 때문에 일부는 익스플로잇에 의존해야 실행된다.

대부분의 펌웨어 해킹은 자유 소프트웨어이다.

### HDD 펌웨어 해킹
모스크바에 본사를 둔 카스퍼스키 랩은 이퀘이전 그룹이라고 부르는 개발자 그룹이 다양한 드라이브 모델을 위한 하드 디스크 드라이브 펌웨어 수정본을 개발했으며, 여기에는 드라이브가 포맷되거나 지워져도 데이터가 드라이브의 특정 위치에 저장될 수 있게 하는 트로이 목마가 포함되어 있다고 밝혔다. 카스퍼스키 랩 보고서는 이 그룹이 NSA의 일부라고 명시적으로 주장하지는 않았지만, 다양한 이퀘이전 그룹 소프트웨어 코드에서 얻은 증거는 그들이 NSA의 일부임을 시사한다.

카스퍼스키 랩의 연구원들은 이퀘이전 그룹의 활동을 지금까지 발견된 해킹 작전 중 가장 정교한 것으로 분류했으며, 최소 42개국에서 이퀘이전 그룹으로 인한 약 500건의 감염 사례를 기록했다.

## 보안 위험
우분투 리눅스 배포판을 만든 회사인 캐노니컬의 설립자 마크 셔틀워스는 사유 펌웨어를 보안 위험으로 설명하며 "장치의 펌웨어는 NSA의 가장 친한 친구"이며 펌웨어를 "기념비적인 규모의 트로이 목마"라고 불렀다. 그는 저품질의 폐쇄형 소스 펌웨어가 시스템 보안에 큰 위협이 된다고 주장했다. "가장 큰 실수는 NSA만이 이러한 신뢰 위치를 남용한다고 가정하는 것입니다.  사실, 모든 펌웨어는 제조업체의 최고 수준의 무능함과 그러한 기관들의 매우 광범위한 최고 수준의 능력으로 인해 불안정의 오물통이라고 가정하는 것이 합리적입니다." 이 문제에 대한 잠재적인 해결책으로 그는 "하드웨어 연결 및 종속성"을 설명하고 "실행 코드를 포함해서는 안 되는" 선언적 펌웨어를 요구했다. 펌웨어는 코드를 확인하고 검증할 수 있도록 오픈 소스여야 한다.

사용자 정의 펌웨어 해킹은 스마트폰이나 USB 장치와 같은 장치에 멀웨어를 주입하는 데에도 초점을 맞췄다. 이러한 스마트폰 주입은 말콘에서 심비안 OS에서 시연되었으며, 해커 컨벤션이었다. 배드USB라고 불리는 USB 장치 펌웨어 해킹은 블랙 햇 USA 2014 컨퍼런스에서 발표되었으며, USB 플래시 드라이브 마이크로컨트롤러가 컴퓨터를 제어하고, 데이터를 유출하거나, 사용자를 감시하기 위해 다양한 다른 장치 유형을 위장하도록 재프로그래밍될 수 있음을 시연했다. 다른 보안 연구원들은 BadUSB 뒤에 있는 원리를 악용하는 방법에 대해 더 연구하여, 동시에 다양한 USB 장치의 동작을 수정하는 데 사용할 수 있는 해킹 도구의 소스 코드를 공개했다.

## 같이 보기

* 펌웨어 해킹
* 마이크로프로그램
* 플래시 메모리
* 바이오스
* 연방 표준 1037C
* MIL-STD-188

## 각주

분류:임베디드 시스템