Home
System Hacking
📠

3D 프린터 모의해킹 프로젝트 회고록

Type
회고록
TIME
2024/02/13 08:05
종류
프로젝트
1 more property
2020년에 진행했던 3D 프린터 취약점 점검 프로젝트를 4년이 지난 시점인 2024년에 작성하는 것이라 잘못된 부분이 있을 수도 있지만 최대한 기억을 살려서 써내려 가 볼 테니 재미있게 봐주세요

팀빌딩

idea reference

사실 BOB를 지원하고 합격하면서 수업을 들을 때 까지도 뭔가 하고싶은 프로젝트는 존재하지 않았고 프로젝트 팀을 만들어야 할 시기쯤 멘토님들이 어떤 프로젝트가 성공하기 쉬운지, 실패가 없는지 말씀 해주시는 것을 듣고 3D 프린터도  Vetor가 아닌가 생각을 했고 멘토님들에게 물어보니 괜찮은 프로젝트 주제가 될 것 같다고 말씀하셔서 해당 프로젝트를 주제로 내가 PM이 되어서 이끌어 가고 싶다고 생각했다.
사실 내가 프로젝트를 이끌어 본 적도 어디선가 리더가 되어 주어진 일에 열과 성을 다해서 해본 적이 없어서 과연 내가 잘 할 수 있을까 고민이 되긴 했다.

Team Building

팀 빌딩 전까지 제혁이 빼고 선뜻 한다고 연락온 사람은 아무도 없었던거 같다.
다른 사람들은 팀 빌딩을 완료하여 멘토님도 컨텍하고 있는 것을 보면서 내심 많이 초초해지고 마음에 여유가 없어지는데 제혁이가 괜찮다고 다독여 줬던게 기억이난다.
그렇게 평소에 같이 공부하고 열심히 할 것 같던 사람에게 연락을 돌렸지만 이미 다들 팀이 있다고 했고, 결국 팀 빌딩 당일 날이 와서 남아있는 인원에게 급하게 다 연락을 돌렸던거 같다.(아닌가?…ㅋㅋ 기억이 잘…)
그렇게 우리 팀이 와해 될 뻔 했지만 진근이가 좋아하던 우덜식 처리를 통해서 00년생의 21살 남정내 5명인 민제, 성환, 제혁, 진근, 나까지 5명이 만들어 졌고 겨우겨우 멘토님을 컨택하여 프로젝트 팀이 와해될 뻔한 위기는 잘 넘겼다.
각자 장점 정리해 둔 것이 웃겨서 다시 써보면
장종민
장점 : 감이 좋고 포기하지 않는다. 밝고 창의적이다.
특기 : 크롤링, 개발, 리버싱등을 잘 하지 않지만 서포트 해줄 수 있다.
내가 생각하기에 나는 팀원들이 1개씩 맡으면 난 뒤에서 전체적으로 공부해서 서포트해주면서 도아주는? 역할을 맡고싶다
박민제
장점 : 학습+팀 활동에 열정적으로 참여, 끈기 있게 참여가능
특기 : 워게임에서 시스템 해킹 문제를 다수 풀어봄
분석 역할도 맡고 싶고 안해본 활동들도 맡아서 새로운거 배워보고 싶기도 함!!
우제혁
장점 : 화를 안냄, 긍정적, 열정, 체력
특기 : 삽질, 자료조사 웹
부족할 수 있어도 공부해서 필요한 부분을 채운다는 마음가짐으로 프로젝트에 임하고 싶음
이진근
장점 : 배경지식 많음, 웹 취약점 제보 이력있음, CTF 수상해본 적 있음(근데 옛날이라 요즘건 잘 모름)
특기 : 리버싱, 개발(개발경험 다수)
단점 : 멘탈이 별로 안좋음ㅠㅠ
유성환
장점 : 삽질은 끈기 있게 할 자신 있음
특기 : 시스템 해킹(조금) 및 코딩
시스템은 wargame 좀 풀어봤고 코딩에 대해서는 엄청 창의적이게 할 자신은 없지만 잘 돌아가게는 할 수 있음
새로운거 도전해보는거 좋아하고 아는게 많지 않아서 사소한 것도 물어보면서 같이 성장해 나가는 걸 좋아함
이렇게 각자 주 분야를 가지고 프로젝트를 들어 갈 수 있었다.

프로젝트 수행

사실 프로젝트를 들어가는데 중요한 시점으로 분할해 본다면 3D 프리터 구매 전과 구매 후로 나눌 수 있을 것 같다.
사실 렌탈도 고민했지만 프로젝트를 수행하는 과정에서 한번은 고장을 낼 듯 하여, 중고로 구매하기로 결정했다.

3D 프린터 구매 전

사실 팀 전체가 IoT 장비에 대한 지식이 없었고, 일단 당장 할 수 있는 것 먼저 진행했다.
3D 프린터 관련 논문부터 읽었던 것 같다·
1.
Security Analysis of Networked 3D Printers
2.
My Smartphone Knows What You Print Exploring
3.
See No Evil, Hear No Evil, Feel No Evil, Print No Evil? Malicious Fill Pattern Detection in Additive Manufacturing
4.
3D 프린팅 시장 및 기술 동향
이렇게 논문을 읽고 정리하니까, 대충 감이 잡힌 듯 아닌 듯 애매한 상태가 되었다.
솔직히 지금 생각해보면 나름 도움이 된 것 같기도?
추가적으로 멘토님들이 말씀해주시기를 IoT가 쉽긴한데 보안이 떡칠 되어 있을 경우 Desoldering을 해야할 수 있다고 말씀해주셔서 프로젝트를 진행하기 위해서는 IoT 장비에 대한 지식을 쌓아야 한다고 생각을 했다.

IoT 험난기

멘토님들의 피드백을 듣고 바로 IoT 스터디를 시작했다.
사실 3D 프린터를 바로 구매하여 프로젝트를 진행하였으면 좋았겠지만 프로젝트를 진행하기 위해서 구매하기로 선정한 3D 프린터가 200만원 상당의 S사 프린터 였다는 점과 5명 전부 학생이여서 돈이 없었다.
회의 결과로 일단 당근으로 구매하자는 의견으로 좁혀졌고 적당한 매물을 찾기까지 IoT 장비를 뜯어보고 Desoldering 해보면서 싼 것 먼저 망가(?)트려서 3D 프린터는 소중하게 다루자는 의견으로 좁혀졌다.
1.
iptime firmware 추출
일단 이멘토님 수업에 들었던 iptime firmware 추출먼저 다시 해보기로 했다. binwalk를 통해서 바이너리를 추출하는건 실패 했던 것 같다.
2.
iptime 공유기 디버깅
먼저 hacker school에 올라와 있는 iptime 공유기 해킹 자료를 보면서 의미 없이 따라 했던 것 같다. magic key를 입력하고 특수한(?) shell에 진입했지만 그 뒤로 더 진행 할 수 없었던거 같다.
이때 PCB에 배터리, 저항, NAND Flash, CPU 등등 하드웨어에 대한 지식과 UART PIN, JTag 등 디버깅에 대한 지식을 조금 습득했다.
이때는 솔직히 뭔가 화면에 뜬다는 것이 신기했다. iptime 공유기가 부팅을 하는 시점에 UART를 꼽아 넣으면 부팅 메시지와 관련 정보가 아래와 같이 화면에 뜨는 것 자체가 신기했다.
그냥 화면에 뜬다는 것 자체가 신기했던 시절

사무실 계약

위에 과정을 하고 나서 공유 사무실을 계약했던거 같다. 한달에 60좀 넘었던거 같은데 어쨋든 사무실도 구했고 그 작은 사무실에 의자 5개 노트북 5대만 넣어도 사무실이 가득 찼다. 당연히 창문은 없었다…
사무실
그때가 가을이였는데 에어컨이 월~금요일만 오전 9시~오후 6시까지 틀어줬던걸로 기억한다. 당연히 컴퓨터 열기에 모니터 열기 엄청 더웠던걸로 기억난다. 프로젝트 하다 너무 더워서 새벽에 공유 오피스 공용시설? 정수기 있고 창문 있는 거기서 프로젝트 진행했던게 기억난다.
뇌섹남 민제
뇌섹남 성환
3.
CPU Chip Cheat Sheet
이제는 공유기가 고의는 아니더라도 실수로 망가져도 상관 없다고 생각했다. 그래서 팀원 모두의 동의를 받아 iptime 공유기를 직접 조지기로 마음을 먹는다. 공유기의 CPU Chip Cheat sheet를 검색하고 해당 Cheat Sheet를 검색하여 TX, RX 핀을 찾아 직접 구리선 한가닥을 정밀하게 간섭 없이 접촉시켜 부팅 메시지를 본다거나
그때 실수로 건들여서 한가닥이 틀어졌을때 제혁이의 세상을 잃은 표정이 너무 웃겼다ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 지금도 생각나넼ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
부팅 중인 iptime 공유기를 멀티미터로 부팅중인 CPU를 긁어 고의로 Short를 발생시켜 CPU Short를 발생시켜 부팅 에러 메시지를 확인하는 행위를 했다.
쇼트를 내고 있는 장종민
4.
CPU, Flash Desoldering
인두기로 납땜 부분을 지지고 때는것 까지는 성공했는데 하는 족족 다 하늘로 보내버렸다. 열풍기로 녹이는데 지금 생각해보면 골고루 열을 주면서 때야하는데 한 몇초 드라이기마냥 열 주고 안녹았다고 그냥 인두기로 지졌다. 솔더윅이 납을 먹는게 신기하기는 했다.
지금 생각해보면 당연한 결과다 열풍기로 녹이는 것도 아니고 350도 인두기로 지져버렸으니 내부가 다 탈 수 밖에 없지…ㅋㅋㅋㅋ 어쨋든 한번 납땜을 풀고 부품을 때보자는 의미로 시도했던 것이니 어쩌면 성공(?) 했다고 볼 수 있겠다.
5.
로봇 청소기 분해
이때 나름 성공도하고 경험도 쌓여서 자신감이 붙었다. 그래서 조금 비싼 로봇청소기를 분해해보자 생각했고 막상 분해하니까… 우리 실력으로 만질 수 있는 부분이 없어서 다시 조립했던거 같다.
21세기 기계 부시기 운동중인 민제와 진근이
6.
3D 프린터 펌웨어
공식 홈페이지에서 펌웨어를 다운받았지만 암호화되어 할 수 있는 것이 없었다.

3D 프린터 구매 후

그동안 꾸준히 제혁이가 당근 마켓과 중고 나라에 검색한 결과 80만원에 구매를 했던거 같다. 구매를 하고 직접 3D 프린터를 가지러 갔다. 어디 대학교 산하 메이커 공간이였던걸로 기억하는데 거기까지 성환이 어머니께서 직접 차로 데려다주시고 3D 프린터를 구루마에 싣고 사무실에 들고 왔던거 같다.
이제 3D 프린터가 생겼지만 바로 뭘 하지는 않았다. 금액적으로도 부담이였고 망가지는 순간 프로젝트가 망할 수 있다고 생각하니 기능을 먼저 일단 분석했으며, 우리가 분석한 기능은 아래와 같았다.

분석 기능

1.
카트리지(필라멘트) 삽입
2.
네트워크(무선, 유선)
a.
업데이트
b.
도면 전송
3.
Email
4.
WEB
a.
비밀번호 입력(3D 프린터 자체 비밀번호)
b.
모니터링 기능
5.
물질 출력
타노스한테 패배한 아이언맨
6.
USB
a.
도면 넣기
b.
업데이트
7.
보안
a.
비밀번호 설정

기업 컨텍

일단 3D 프린터를 구매했고 우리가 구매한 제품은 3D 프린터 제품군에서도 저가형(?) 제품이였다. 따라서 더 비싸고 큰 산업 현장에서 사용하는 3D 프린터를 분석하고 싶었고 구매한 3D 프린터 업체와 컨텍하여 3D 프린터 1대와 산업 현장에서 사용하는 3D 프린터를 본사에 가서 직접 점검할 기회를 받았다.
사실 이것 때문에 프로젝트의 내용이나 관련 이야기를 하지 못한 것도 크다 그쪽에서 취약점 공개나 프로젝트 공개를 하지 않는다는 것을 약속 받고 컨텍을 한 것이니…
가산 인력거꾼 저렇게 구루마에 올려서 가산에서 구로역까지 갔다ㅋㅋㅋㅋ
가산동 가마꾼
그리고 컨텍 미팅이 끝난 뒤 명함을 받았다. 추후 이 명함을 잘 가지고 있던 것이 행운이였다. 다시 한번 연락드려 상황 설명과 함께 시간이 지난 지금 프로젝트 진행했던 사항을 외부에 공개해도 되냐고 여쭤보았고 괜찮다는 답변을 받았다!!! 그래서 4년 만에 처음으로 글로 작성하는 것이다.

첫 펌웨어 획득 과정

일단 USB의 기능에서 펌웨어를 넣고 3D 프린터에 꼽으면 바로 업데이트가 실행된다. 이를 통해서 3D 프린터를 이전 버전으로 다운그레이드 했다. 그리고 네트워크를 통해 업데이트를 진행할 수 있었다.
여기서 하나 아아디어를 생각한 것이 3D 프린터가 업데이트를 요청하는 시점은 이미 3D 프린터 내부에 IP 혹은 URL이 저장되어 있을 것이고 이는 인증이 된 상태니까 암호화를 진행하지 않은 펌웨어를 내려주지 않을까 생각했다.
위와 같은 가정을 세우고 iptime 공유기에 포트 미러링을 설정한 뒤 와이어 샤크로 해당 패킷을 잡았다. 근데 정말 암호화되지 않은 압축 파일이 전송되는 것을 확인했다.
full firmware는 아니고 업데이트를 위한 firmware였지만 내부에 sh 파일과 업데이트 내용을 확인 할 수 있었다. 하지만 여기서 문제가 있었다 우리가 획득 한 것은 full firmware가 아니라 업데이트 파일 중 일부와 .sh 스크립트였다.

펌웨어 추출

여기서 사실 좌절할 뻔 했지만 한번 더 아이디어를 냈다.
정리하면 업데이트 펌웨어는 특정 URL을 DNS를 통해 아이피를 받아 온다? 이 DNS를 변조할 수 있다면 접근하는 URL의 IP 변조가 가능하다. IP를 우리 IP로 변조한 뒤 접근하는 URL에 조작한 펌웨어를 올려두면 다운 받고 실행한다라는 가설을 세움
자 위에서 말 한 내용을 통해 DNS는 사설 DNS 사용이 가능하며, DNS를 변조하여 펌웨어에 Reverse Shell을 연결하는 .sh 파일을 업로드하면 실행하지 않을까? 아래의 그림과 같은 내용을 통해서 Reverse Shell을 획득하려고 했다.
DNS를 통한 업데이트 펌웨어 변조 도식화
Fake DNS를 오픈하고 해당 Fake DNS를 DNS로 설정한 뒤 Fake WEB 서버를 오픈하여 해당 웹 서버에 변조한 악성 펌웨어를 올려뒀다.
쉘을 획득했으니 모든 파일 시스템을 추출했고 파일 시스템 분석에 들어갔다.
쉘을 획득한 모습
모든 파일 시스템이 있으니 3D 프린터 내부에 존재하는 바이너리, 파일등 전부 하나 하나 뒤져가면서 취약점을 찾았다. 나머지 취약점이나 자세한 내용은 발표로 풀어나갈 생각이니 여기까지!!

컨텍 기업 본사 방문 점검 후기

산업 현장에서 사용하는 3D 프린터라고 해서 크게 다른점은 존재하지 않았다. 크기가 2M 정도 되고 무게가 200KG 정도 된다는거? 내부 바이너리와 사용하는 기능은 비슷하여 크게 점검하는데 어려운 점은 없었다
근데 하나 재미있는 이야기를 풀자면 3D 프린터에 보안 기능으로 비밀번호를 설정할 수 있는데 이 비밀번호를 모르면 3D 프린터를 제어할 수가 없다. 그런데 담당자가 기계만주고 비밀번호를 주지 않아서 차질이 생길뻔 했지만 이미 비밀번호를 유출할 수 있는 취약점을 찾아서ㅋㅋㅋ 해당 취약점으로 비밀번호를 강제로 알아내서 점검을 진행했다.

후기

그떄 생각하면 너무 힘들고 진짜 하루에 3~4 시간 정도 잤던거 같다. 다들 피곤에 쩔어서 머리만 대면 잠들었고
후… 너희들은 이런거 피지마라… 노트북 피니까 머리아프네
기절한 제혁이
커피는 미친듯이 마셨으며… 사실 카페인을 안먹으면 진행 할 수 없었던 듯?
하루에 5명에서 먹은 커피양
너무 힘들었고 밥은 거의 김밥만 먹다 취약점 찾으면 치킨을 먹고
치킨 먹으면서 분석하는거 지금보니까 왜이리 짠하냐…
엄청 각자 스트레스 받았던거 같다. 진짜 퇴근하니까 애가 표정이 바뀐거 봐
일하는 민제
퇴근하는 민제
그래도 나름 지금 생각해보면 재미있었다.
밥먹고 30분 정도는 꼭 쉬었고
진근이 자네는 밥먹고 테트리스만 하나?
서로 엄청 피곤하고 힘든데도 화나 짜증한번 서로 낸적 없(?)으며…(미안하다 난 화 낸거 같다)
종민 : 민제가 나 좋아하지마 민제 : 그게 뭔데, 그거 어떻게 하는 건데.
서로 의지하고 싸우지도 않고 사이 좋고 열심히 진짜 잘 했던거 같다.
너무 더워서 밖으로 피서
근데 난 고양이도 아니고 저기 왜 들어가 있는거냐??
길냥이??
마지막은 민제의 ipconfig 짤
쾅!!! 이런 젠장 놓쳤어!!
나랑 같이 프로젝트 해주고 열심히 끝까지 나 믿고 따라와 줘서 정말 고마워 앞으로 뭘 하던 제혁이, 민제, 진근이, 성환이 너희랑 다시 한번 더 해보고 싶다.
추가로 도움 주신 멘토님들 PL님도 너무 다 감사합니다. 도움 많이 주시고 정말 많이 성장할 수 있도록 이끌어 주셔서 너무 감사합니다.