목록2026/04 (26)
graf
드디어 시작한다. 작년에 RSW 분석을 마치고부터 계획했던 일인데 6개월만에 준비가 끝났다. 1. 목표목표는 글리칭을 통해 esp32의 secure boot를 우회하고 검증되지 않은 펌웨어를 실행시키는 것이다. 계획을 좀 더 세분화하면 1. 펌웨어 추출 및 업로드 방법 확보2. 펌웨어 검증 루틴 존재 식별3. 검증 성공/실패 전력 흐름 비교4. 트리거 잡기5. 결함이 발생하는 파라미터 구체화6. 글리칭 주입 이렇게 쪼갤 수 있을 것 같고 트리거 잡기에서 가장 오래 시간을 쓰게 되지 않을까 예상 중이다. 2. 보유 장비현재 보유 장비는 로직 분석기 (24MHz)CH341Chip Whisperer휴대용 멀티미터라즈베리파이3B+이게 전부다. 허스키를 제외하면 전부 몇 만원밖에 안 하는 싸구려 장비들..
1. 개요결제 관련 정보가 관리되는 방식은 확인했다. 이번엔 이 데이터를 어떻게 수정 가능한지 알아보려고 한다. 지금은 어떤 명령어를 어떤 형태로 사용해야할지 알 수가 없다. 지난번에 나왔던 90 4C도 표준 자료에는 언급조차 되지 않는 명령어였다. 지금 계획은 실제로 카드를 사용하면서충전 혹은 결제되는 과정을 캡쳐를 해보는거다. 2. 통신 캡쳐저녁에 시간이 좀 남길래 지하철역에 왔다. 역에 자리가 없어서 노트북 쓸 때 바닥에 앉아서 했는데 proxmark를 노트북 위에 올려놓으니까 장치가 동작을 못하더라. 여기 오자마자 고장난 줄 알고 식겁했다. 이건 기억해두자. 캡쳐는 성공적으로 마쳤다. 잔액이 없는 카드로 먼저 찍어보고 결제할 때 한번 찍고, 다시 나오면서도 한번 더 찍었다. 이제 드..
1. 개요얼마 전에 파형 측정이나 글리칭 테스트할 때 쓰려고SMA에 바로 연결 가능한 프로브를 구매했었다. 그런데 저 검은색 바늘이 하필 불량으로 왔다. 내가 원래 재수가 좀 없다. ..라고 하려고 했는데 판매자가 제품 회수 없이 그냥 환불을 해줬다. 알아서 폐기하랜다. 저 바늘 내부가 어떻게 돼있나 까보고 싶었는데 잘됐다. 한번 열어보고 혹시 고칠 수 있다면 고쳐서 써봐야겠다. 2. 수리2.1 피복 제거피복을 전부 제거했다. 구조가 굉장히 간단하다. 여기서 가운데 금색 파이프는 내부에 용수철이 들어있어서 바늘이 유연하게 움직일 수 있도록 제작되었다. 문제가 되는건 이 부분이다. 마스킹은 없지만 저항으로 추정 중이다. 이게 원래 오실로스코프용으로 판매하는 거라 측정용 감쇠 용도로 들어..
휴학하는 동안 재미로 분석했던 자료인데 cve 때문에 비공개였다가 이제 날짜가 지나서 공개글로 전환했다. 추출한 개인키 관련 정보나 서버 주소, 후킹에 사용한 코드 등등은문제가 될 수 있으니 업로드 전에 제거했다. 분석은 작년 7월인가에 했었고 벌써 9개월이나 지났다. 사실 공개 날짜는 진작에 지났는데 다시 정리하는게 귀찮아서 계속 미뤘다. 벤더가 시간을 끌기도 했고.. 정리하는 김에 내용을 다시 꼼꼼하게 읽어봤는데 임베디드 쪽을 공부하기 시작한지 얼마 안 됐을 때라 그런지 다시 보니 한심해보이는 내용이 정말 많더라.. 중간고사 끝난 김에 시간 내서 다시 한번 정리하고 업로드했다. cve는 CVE-2025-57581, CVE-2025-57582 이렇게 두개가 발급됐다. cve는 와이파이 자격 증명..
일단 개인키와 인증서의 추출은 성공을 했는데 만약 개인키와 인증서를 모든 장치에서 공유하고 있다면 더 큰 문제가 된다. 이를 확인하기 위해 제품을 추가로 분석해봤다. RSW-725R 동일한 모델이다. 기판 색깔이 흰색으로 바뀐걸 제외하면 구성은 모두 동일하다. 1. 부팅 메시지 확인부팅 메시지를 먼저 확인해봤다. ets Jan 8 2013,rst cause:1, boot mode:(3,1)load 0x4010f000, len 1392, room 16 tail 0chksum 0xd0csum 0xd0v3d128e5c~ld 이번에 확인한 부팅 메시지 ets Jan 8 2013,rst cause:1, boot mode:(3,6)load 0x4010f000, len 1392, room 16 tai..
cp ./esp_backup.bin ./test9.bin 마지막 테스트가 됐으면 좋겠다. 1. 데이터 추가printf "\x25\x78\x3a\x20\x00\x25\x78\x20\x00\x0a\x00" | dd of=test9.bin bs=1 seek=$((0x600)) count=11 conv=notrunc 문자열을 약간 바꿨다. 중간에 널문자를 껴서 %x:, %x, \n 세개의 문자열로 구성했다. {주소}: {16바이트} 형식으로 출력할거다. 램이 80kb 정도 되니까 이렇게 출력해도 5천줄은 나올거다. printf "\x00\x06\x20\x40" | dd of=test9.bin bs=1 seek=$((0x610)) count=4 conv=notruncprintf "\x08\x55\x10\x4..
현재 계획은 후킹으로 메모리를 통째로 덤프하는거다. 원래는 개인키가 로드된 버퍼를 찾아서 깔끔하게 출력하는게 계획이었다. 이제 그럴 필요가 없어지긴 했지만.. 그래도 이왕 준비한거 설계상의 결함을 증명해서 키가 암호화된 상태였어도 안전하지 않았음을 보일거다. 사용 예정인 함수는 이거다. 이 함수로 데이터를 16진수 형태로 꺼내야겠다. 1. test5 - 포멧 출력 테스트cp ./esp_backup.bin ./test5.bin 이번에도 ets_printf의 사용 가능 여부를 먼저 테스트를 해볼거다. 번거롭지만 어쩔 수 없다. 나중에 오류가 생겼을 때 거꾸로 원인을 찾는 것보다는 이게 낫다. 그래도 준비는 다 돼있으니 그렇게 오래 걸리진 않을거다. 1.1 리터럴 추가이번에 추가해야하는 데이..
갑자기 든 의문인데 이 장치를 오랫동안 분석하면서 느낀 점은, 장치의 보안 설계가 그닥 치밀하지 않다는 점이다. 그런데 굳이 인증서랑 개인키만 암호화해놓았다는 가정이 이해가 되질 않는다. 그리고 데이터가 헤더 쪽만 살아있고 뒷부분이 파싱이 안됐는데 오히려 검출이 안되게 하려면 헤더만 암호화하는게 나았지 않았을까? 이렇게 생각하니 뭔가 이상하다. 내가 파싱을 잘못한건 아닐까? 아님 내가 뭔가 실수를 했던건 아닐까..? $ binwalk ./esp_backup.binDECIMAL HEXADECIMAL DESCRIPTION--------------------------------------------------------------------------------402130 ..