اول بررسی میکنیم که مفهوم IoT یعنی چی؟! درواقع IoT مخفف واژگان Internet Of Things می باشد که به معنی اینترنت اشیا میباشد. با ترجمه آن کمی میتوان به موضوع پیبرد ولی بریم سراغ توضیح؛ درواقع IoT نسل بعدی فناوری های ارتباطی و تبادل اطلاعات دنیایپ میباشد. هر روز هزاران دستگاه IoT در بازار عرضه میشوند و بیشتر این دستگاه های از محیط های Cloud به منظور تبادل اطلاعات استفاده میکند، از این رو این دستگاه ها از لحاظ امنیت از اهمیت بسیاری برخوردار هستند.
بحث امنیت IoT را نمیتوان در یک محتوا توضیح داد و ما در این محتوا بیشتر به بررسی Firmware دستگاه های IoT میپردازیم
یک نرم افزار برنامه نویسی شده که برو روی دستگاه های IoT نصب شده است و به عبارتی یک سیستم عامل شناخته میشود برای مثال Firmware مودم های D-link. این Firmware ها معمولا به صورت فایل .bin هستند و یک سری ها نیز با فرمت های فشرده شده مانند Tar, Zip و Bin وجود دارند
برای دریافت Firmware یک دستگاه میتوانید به وب سایت آن دستگاه مراجعه کنید و Firmware آن را دانلود کنید و اگر درصورت نبودن از سازنده و یا سازندگان آن درخواست کنید و اگر هم جواب نگرفتید در اینترنت به دنبال آن بگردید
برای اینکار میبایست از ابزار binwalk(GitHub) استفاده کنید، این ابزار به منظور خارج سازی فایل های Firmware دستگاه های IoT از فرمت های همچون Bin مورد استفاده قرار میگیرد(البته این فقد یک قسمت از کار این ابزار قدرتمند میباشد) دیدن help این ابزار:
➜ ~ binwalk --help Binwalk v2.1.2 Craig Heffner, ReFirmLabs https://github.com/ReFirmLabs/binwalk Usage: binwalk [OPTIONS] [FILE1] [FILE2] [FILE3] ... Disassembly Scan Options: -Y, --disasm Identify the CPU architecture of a file using the capstone disassembler -T, --minsn=<int> Minimum number of consecutive instructions to be considered valid (default: 500) -k, --continue Don't stop at the first match Signature Scan Options: -B, --signature Scan target file(s) for common file signatures -R, --raw=<str> Scan target file(s) for the specified sequence of bytes -A, --opcodes Scan target file(s) for common executable opcode signatures -m, --magic=<file> Specify a custom magic file to use -b, --dumb Disable smart signature keywords -I, --invalid Show results marked as invalid -x, --exclude=<str> Exclude results that match <str> -y, --include=<str> Only show results that match <str> Extraction Options: -e, --extract Automatically extract known file types -D, --dd=<type:ext:cmd> Extract <type> signatures, give the files an extension of <ext>, and execute <cmd> -M, --matryoshka Recursively scan extracted files -d, --depth=<int> Limit matryoshka recursion depth (default: 8 levels deep) -C, --directory=<str> Extract files/folders to a custom directory (default: current working directory) -j, --size=<int> Limit the size of each extracted file -n, --count=<int> Limit the number of extracted files -r, --rm Delete carved files after extraction -z, --carve Carve data from files, but don't execute extraction utilities -V, --subdirs Extract into sub-directories named by the offset Entropy Options: -E, --entropy Calculate file entropy -F, --fast Use faster, but less detailed, entropy analysis -J, --save Save plot as a PNG -Q, --nlegend Omit the legend from the entropy plot graph -N, --nplot Do not generate an entropy plot graph -H, --high=<float> Set the rising edge entropy trigger threshold (default: 0.95) -L, --low=<float> Set the falling edge entropy trigger threshold (default: 0.85) Binary Diffing Options: -W, --hexdump Perform a hexdump / diff of a file or files -G, --green Only show lines containing bytes that are the same among all files -i, --red Only show lines containing bytes that are different among all files -U, --blue Only show lines containing bytes that are different among some files -w, --terse Diff all files, but only display a hex dump of the first file Raw Compression Options: -X, --deflate Scan for raw deflate compression streams -Z, --lzma Scan for raw LZMA compression streams -P, --partial Perform a superficial, but faster, scan -S, --stop Stop after the first result General Options: -l, --length=<int> Number of bytes to scan -o, --offset=<int> Start scan at this file offset -O, --base=<int> Add a base address to all printed offsets -K, --block=<int> Set file block size -g, --swap=<int> Reverse every n bytes before scanning -f, --log=<file> Log results to file -c, --csv Log results to file in CSV format -t, --term Format output to fit the terminal window -q, --quiet Suppress output to stdout -v, --verbose Enable verbose output -h, --help Show help output -a, --finclude=<str> Only scan files whose names match this regex -p, --fexclude=<str> Do not scan files whose names match this regex -s, --status=<int> Enable the status server on the specified port
➜ ~ binwalk c7600rsp72043-adventerprisek9_li-mz.155-3.S10.bin DECIMAL HEXADECIMAL DESCRIPTION -------------------------------------------------------------------------------- 0 0x0 ELF, 32-bit MSB executable, version 1 (SYSV) 34291 0x85F3 Copyright string: "Copyright (c) 1986-2019 by Cisco Systems, Inc." 34686 0x877E Copyright string: "Copyright (c) 1986-2019 by Cisco Systems, Inc." 35087 0x890F Copyright string: "Copyright (c) 1986-2019 by Cisco Systems, Inc." 35485 0x8A9D Copyright string: "Copyright (c) 1986-2019 by Cisco Systems, Inc." 35885 0x8C2D Copyright string: "Copyright (c) 1986-2019 by Cisco Systems, Inc." 36441 0x8E59 Copyright string: "Copyright (c) 1986-2019 by Cisco Systems, Inc." 36852 0x8FF4 Copyright string: "Copyright (c) 1986-2019 by Cisco Systems, Inc." 37243 0x917B Copyright string: "Copyright (c) 1986-2019 by Cisco Systems, Inc." 37638 0x9306 Copyright string: "Copyright (c) 1986-2019 by Cisco Systems, Inc." 38029 0x948D Copyright string: "Copyright (c) 1986-2019 by Cisco Systems, Inc." 38585 0x96B9 Copyright string: "Copyright (c) 1986-2019 by Cisco Systems, Inc." 38832 0x97B0 POSIX tar archive, owner user name: "_sp-spadventerprisek9_li-m.czbin"
محتویات استخراج شده معمولا در یک پوشه کنار همان Firmware ذخیره میشوند
پس از استخراج محتویات و خارج سازی Firmware از حالت خاص خود کارمان را به منظور انجام آنالیز شروع میشود
ما با استفاده از ابزار (Gitub)firmwalker اینکار را انجام میدهیم زیرا آنالیز دستی Firmware کار بسیار حوصله سر بر و زمان بری میباشد و ما به منظور صرفه جویی در زمان از ابزار های که به صورت اتوماتیک اینکار را انجام میدهند استفاده میکنیم؛ یکی از این ابزار های اساس میباشد
➜ git clone https://github.com/craigz28/firmwalker ➜ cd firmwalker ➜ firmwalker git:(master) chmod +x firmwalker.sh
Start Scan:
➜ firmwalker git:(master) ✗ ./firmwalker.sh bin