목록ChipWhisperer/GlitchingTutorial (10)
graf
1. 개요Fault101의 마지막 내용이다. 사실 이번에도 지난번과 내용이 같다. Fault1.3와 동일한 펌웨어를 대상으로 한다. 이번엔 볼트 글리치를 활용해야한다. 지난번처럼 상황에 대한 설명을 해준다. 이번엔 이미 어떤 취약점이 존재하는지 다 알고 있으니 그냥 지난번에 찾은 파라미터를 갖다 쓰라고 한다. Fault2.2 다시 할 때는 아무것도 모른다고 가정하고 처음부터 삽질했는데 이렇게까지 말하니 그냥 이전 분석 자료를 참고해서 진행해야겠다. 절대로 다시 탐색하는게 귀찮은게 아니다. 그보다 베이스 코드가 이번에도 개똥같이 돼있다. 이제 허스키는 아예 고려하지도 않는다. 이게 한번에 멀쩡히 실행되는걸 본 적이 없다. 그냥 다 지우고 다시 만들어서 쓰는게 낫겠다. 2. 취약점 요..
1. 개요내용은 Fault1.2와 동일하다. uint8_t password(uint8_t cmd, uint8_t scmd, uint8_t len, uint8_t* pw){ char passwd[] = "touch"; char passok = 1; int cnt; trigger_high(); //Simple test - doesn't check for too-long password! for(cnt = 0; cnt 펌웨어에서 동작하는 패스워드 인증 코드다. reboot_flush()pw = bytearray([0x74, 0x6F, 0x75, 0x63, 0x68])target.simpleserial_write('p', pw)val = target.simpleserial_..
1. 개요그동안은 모두 클럭 글리칭을 사용했다. 이는 결함을 정밀하게 발생시킬 수 있다는 장점이 있긴 하지만 최근 나오는 대부분의 장비들은 pll이 고속 클럭을 다 씹는다고 알고 있다. 클럭 글리칭은 외부 클럭을 주입할 수 있을 때 활용 가능하기 때문에 대상 장치가 내부 클럭을 사용하거나 pll을 쓴다면 활용이 어려워진다. 이번에 시도할 것은 볼트 글리칭이다. 클럭 방식만큼 정밀하진 않지만 훨씬 범용적으로 활용 가능하다. 내가 계획 중인 것도 이 쪽이다. scope.io.glitch_hp = True #enable HP glitchscope.io.glitch_hp = False #disable LP glitchscope.io.glitch_lp = True #enable LP glitchscope..
1. 개요Hopefully you got at least one glitch that looks like the authenticated version of the encryption. We were able to use the return message to narrow down our glitches, but these other glitches shows that power traces are still very useful here.Now that we know where to insert a glitch to bypass the authentication, we could use one of those attacks on unauthenticated encryption. Instead, let'..
1. 개요 이번 목표는 인증 우회다. AES 인증을 우회하여 펌웨어를 업로드하는 것이 목표라고 한다. 내 목표도 secure boot 우회였으니 이번에 배울 점이 정말 많겠다. 이번엔 CPA 공격을 할 줄 알아야 한다고 한다. 이건.. 할 줄 모르는데... 그렇다고 SCA 문서를 다 공부하고 글리칭을 시작하는건 주객전도인 것 같고,, 일단 그냥 이어서 해보자. 모르는 내용이 나오면 공부하면서 진행해봐야겠다. 2. 기본 설정calc_crc = cw.targets.SimpleSerial2._calc_crcprint(calc_crc([0x00, 0x12])) crc를 계산하는 함수다. 현재 대상 장치에서도 인증 정보로 8비트 crc를 사용하고 있다. 여기선 simpleSerial2의 내부 구..
1. 개요 제목에서 알 수 있듯이 이번엔 메모리 덤프다. 이번엔 부트로더 쪽이 표적인 것 같다. 이번에도 꼼꼼하게 진행해보자. 현재 상황에 대한 가정이다. 516261276720736265747267206762206f686c207a76797821 현재 원문을 알 수 없는 이 암호화 데이터를 확보한 상태다. p 명령어를 통해 암호화된 펌웨어를 입력하면 장치는 이를 저장한다. 데이터를 복호화 후 메모리에 저장하는 동작을 수행하는 것으로 추정된다. 복호화 동작을 수행한 다음엔 적절한 에러 코드를 반환한다. 펌웨어 코드가 찾으면 나오긴 하겠지만 자료에서 언급한 것과 같이 이번엔 내부 상황을 알 수 없다고 가정하고 진행해보자. 유일한 전제는 에러 코드가 반환되기 전에 트리거가 발생한다는 것 뿐이다. ..
1. 개요 이번에 시도하는 것은 패스워드 검증 우회다. 펌웨어는 이전과 동일하다. uint8_t password(uint8_t* pw, uint8_t len){ char passwd[] = "touch"; char passok = 1; int cnt; trigger_high(); //Simple test - doesn't check for too-long password! for(cnt = 0; cnt 이번에 시도하는 건 이 부분이다. 패스워드를 입력 후 일치 여부를 반환하는 동작을 한다. reboot_flush()pw = bytearray([0x74, 0x6F, 0x75, 0x63, 0x68]) # correct password ASCII representation..
허스키 튜토리얼은 먼저 읽어봤는데 이미 위스퍼러를 쓸 줄 아는 사람들에게 새롭게 추가된 내용들 위주로 설명해주는 자료였다. 이미 라이트나 프로를 써본 사람을 대상으로 한다고 되어있어서 일단 넘어왔다. course의 fault injection 관련 내용을 먼저 시작할 것이다. 아래 SOLN 파일에는 비어있는 코드 영역에 대한 답이 적혀있다. 하드웨어 설정은 이전과 동일하다. 1. Clock Glitching 이론 설명 첫번째는 클럭 글리칭에 대한 내용이다. 단순 덧셈 루프를 도는 장치에서 오동작을 유발해볼 것이라고 한다. 글리치 생성 방식에 대한 설명이다. Phase Shift를 사용해 두개의 클럭 지연 신호를 만들어내고 둘의 위상 차이에만 신호가 들어간다. 그렇게 생성된 글리치 신호..