반응형

ㅁ 펌웨어 업데이트
 o 차량 ECU의 펌웨어를 업데이트 하기위해선 업데이트 전용 장비가 필요
 o 전용 장비를 이용하여 CAN Bus에 CAN Msg를 주입하여 펌웨어를 업데이트

 o 펌웨어를 추출하고 이후 펌웨어를 변조하여 다시 올리는 것을 실습


ㅁ CAN BUS 구조
 o 펌웨어 업데이트 유틸리티(FirmwareUpdate) : ECU 펌웨어 업데이트 툴
 o CAN BUS 스니핑 유틸리티(Candump)
 o CAN 메시지 전송 유틸리티(Cansend)

 o 전자서명 생성 유틸리티(CalculateSignature)
  - 펌웨어 무결성을 확인하는데 사용되는 전자서명을 생성하는 유틸리티
   (펌웨어의 크기가 352Bytes 고정형의 크기여야만한다)




오른쪽에 candump를 실행시켜두고
왼쪽에 ./firmwareUpdate SampleFirmware.hex를 실행한다.
그럼 왼쪽에 Reprogramming Success뜨면서 VIN 값이 나온다.


오른쪽 헥사값이 나온 것을 복사하여 정리해준다.
앞의 vcan3 3E0 [8]은 필요가 없기 때문에 제거해주고 순수 헥사값만 추출한다.


위의 추출한 값을 HxD에다가 새로만들기 붙여넣는다.

위에 HxD에 저장한 파일을 My.hex로 저장하고 SublimeText3을 통해 업로드를 할것이다.
firmwareUpdate가 있는 경로에 파일을 넣고
Test 우클릭 -> SFTP/FTP -> Upload Folders 진행한다. 


해당 경로에 My.hex가 업로드 되어있는지 확인한다.


그리고 아까전에 사용했던 ./firmwareUpdate를 이용해 my.hex를 실행 시킨다.
그러면 아까전에 samplefirmware로 실행시킨것과 동일하게 성공적으로 실행된다.


그럼 이제 그 펌웨어 파일을 수정하여 업로드, 적용까지 해볼 것이다.
HxD로 돌아와서 아래의 블록표시를 수정했다.


그리고 아까전에 업로드했던 방식 그대로 업로드하고,
./firmwareUpdate My.hex를 실행한다.
그러면 Success가 뜨는 것이 아니라 Failed가 뜨면서 적용이 안되는 것을 확인할 수 있다.
이는 서명이 맞지 않아서 해당 펌웨어를 적용할 수 없는 이유다.
따라서 변조한 펌웨어에 맞게 다시 서명할 필요가 있다.


./CalculateSignature SampleFirmware.hex하면
2B 49 26 ~
2A 57 37 ~
값이 나오는 것을 확인 할 수 있다. 


SampleFirmware.hex의 헥사값을 보니
offset 140부터 서명값과 동일한거보니 offset 140부터 서명 값이 들어가는 것을 볼 수 있다.

그렇다면 변조한 My.hex에 대해 서명값을 아래와 같이 도출한다.
(./CalculateSignature My.hex)
98 AD B8 43 ~
B9 BE 1C EE ~ 
값이 나오는 것을 확인할 수 있고, 해당 값을 복사한다.


My.hex를 HxD로 실행시켜서 아까 찾았던 offset 140~ 에 붙여넣는다.


아까전과 했던 똑같은 방법으로 업로드하고 변조했던 My.hex값을 펌웨어 업데이트한다.
그러면 아래와 같이 내가 수정했던 부분이 바뀌고 제대로 Success!가 뜨는 것을 확인할 수 있따!

이번 실습을 통해 펌웨어 데이터를 추출하고, 펌웨어를 변조하여 다시 업데이트하는 것을 진행했다.
이번 실습은 실습을 위해 아주 간단히 구성된 것으로 판단된다.
실제로 펌웨어 업데이트시에는 이렇게 단순하게 진행되지 않을거라 생각되며, 
그렇다 해도 충분히 펌웨어를 변조하여 업데이트를 진행해 차량에 문제를 일으킬 수 있는 가능성은 존재한다.
알기론 펌웨어 업데이트가 이제 OTT 방식으로 진행되는 추세로 알고 있다.
OTT 방식에서 펌웨어 업데이트 발생할 수 있는 보안 취약점을 연구하고 그에 대한 대응 방안을 마련해야할 필요가 있다.
또한 펌웨어 업데이트 뿐만아니라 차량에 전자기기가 추가되고, 외부와의 통신이 이어지고 있다.
이에 기존 인터넷환경에서 발생하는 해킹 이슈가 차량에서 똑같이 일어 날 수 있으며, 인터넷에서 발생하는 것보다
직접적인 피해(인적,물적)를 야기할 가능성이 있다.







반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기