از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
چطور کدهای Bash را رمزنگاری (Encrypt) کنیم
چطور کدهای اجرایی Bash در محیط لینوکس را رمزنگاری کنیم
سرفصلهای مطلب
سوال : چطور میتواند کدهای شل بش اسکرییپ را در محیط لینوکس رمز نگاری ( انکریپت ) کنم ؟ فایل شِل حاوی پسورد است و من نمیخواهم کسانی که دسترسی اجرا دارند کد شل را ببینند و پسورد را بدست بیاورند ، راهی هست که شل اسکریپت را انکریپت کنیم ؟
پاسخ : ابتدا ، بهترین راه حل این است که فایل بش را رمزنگاری نکنید ، بهتر است کد خود را به خوبی مستند کنید تا هر کس که آن را مشاهده می کند کاری که کد انجام میدهد را دقیقا درک کند ، اگر حاوی اطلاعات حساس مانند پسورد است ، بهتر است راه دگیری برای نوشتن کد پیدا کنید تا نیاز به کد کردن آن نباشد
اگر همچنان اصرار دارید که کد خود را رمزنگاری کنید ، از ابزاری SHC به شکلی در ادامه خواهیم گفت استفاده نمائید ، لطفا توجه کنید که کد رمزنگاری شده Bash Script توسط shc توسط کاربران عادی قابل خواندن نیست ، اما کسی که بداند دقیقا چطور کار میکند میتواند کد اصلی Bash را از باینری کد شده با shc استخراج کند
SHC مخفف shell script compiler میباشد
SHC چطور کار میکند ؟
SHC یک نسخه قابل اجرای باینری از اسکریپت تعین شده با آپشن -f در خط دستور ایجاد می کند ، فایل ایجاد شده پسوند .x خواهد داشت و معمولا از فایل اصلی bash بزرگتر خواهد بود ، همچنین یک نسخه سورس کد فایل با پسوند .c نیز تهیه خواهد شد
دانلود و نصب SHC
نصب پیش نیازها
yum install wget nano vim make gcc gcc-c++ kernel-devel
با
yum groupinstall "Development Tools"
shc را دانلود و نصب نمائید
cd /usr/local/src wget http://www.datsi.fi.upm.es/~frosal/sources/shc-3.8.9b.tgz tar xvfz shc-3.8.9b.tgz cd shc-3.8.9b make cc -Wall shc.c -o shc *** ¿Do you want to probe shc with a test script? *** Please try... make test
مطمئن باشید shc به درستی کامپیال شده است
$ ./shc -v shc parse(-f): No source file specified shc Usage: shc [-e date] [-m addr] [-i iopt] [-x cmnd] [-l lopt] [-rvDTCAh] -f script
اگر میخواهید باینتری SHC هم نصب شود ، کد زیر را اجرا کنید تا نصب و همیشه قابل اجرا شود
make install *** Installing shc and shc.1 on /usr/local *** ¿Do you want to continue? y
اگر خطای زیر را دریافت کردید
install -c -s shc /usr/local/bin/ install -c -m 644 shc.1 /usr/local/man/man1/ install: target `/usr/local/man/man1/ is not a directory: No such file or directory make: *** [install] Error 1
به این دلیل است که در نصب minimal بسته man نصب نیست ، میتوانید از این خطا چشم پوشی کنید و یا دایرکتوری man را ایجاد و مجدد دستور make install را اجرا کنید
mkdir -p /usr/local/man/man1 make install
با اجرای دستور زیر مطمون شوید که به دسترسی نصب شده است
which shc
آموزش استفاده از SHC برای رمزنگاری Bash Script
یک اسکریپت Shell نمونه ایجاد کنید
یک فایل نمونه بش اسکریپت که بخواهیم برای تست با SHC آن را انکریپت کنیم ایچاد کنید
برای تست ، یک فایل به اسم random.sh ایجاد میکنیم که خروجی اجرای آن ایجاد اعداد تصادفی ( بختکی ) است ، شما باید مشخص کنید که چه تعداد عدد تصادفی میخواهید ایجاد کنید
$ vi random.sh
#!/bin/bash echo -n "How many random numbers do you want to generate? " read max for (( start = 1; start <= $max; start++ )) do echo -e $RANDOM done
$ ./random.sh خروجی به شکل زیر خواهد بود How many random numbers do you want to generate? 3 24682 1678 491
کد شل اسکریپت را با استفاده از SHC رمزنگاری کنید
فایل random.sh را با اجرای shc به شکل زیر رمزنگاری کنید
$ ./shc -f random.sh
این دستور دو فایل ایجاد خواهد کرد که با اجرای ls آنها را مشاهده خواهید کرد که آنها به شرح زیر است
$ ls -l random.sh* -rwxrw-r--. 1 ramesh ramesh 149 Mar 27 01:09 random.sh -rwx-wx--x. 1 ramesh ramesh 11752 Mar 27 01:12 random.sh.x -rw-rw-r--. 1 ramesh ramesh 10174 Mar 27 01:12 random.sh.x.c
- random.sh فایل اصلی و بدون رمزنگاری است
- random.sh.x فایل انکریپت شده شِل اسکریپت در فرمت باینری است
- random.sh.x.c سورس کد فایل random.sh به زبان c هست ، فایل سورس زبان c برای ایجاد فایل انکریپت شده بالا کامپایل شده است ، کل منطق پشت shc تبدیل فایل random.sh به برنامه random.sh.x.c است ( و البته کامپایل کردن آن فایل برای ایجاد فایل اجرای random.sh.x )
$ file random.sh random.sh: Bourne-Again shell script text executable $ file random.sh.x random.sh.x: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped $ file random.sh.x.c random.sh.x.c: ASCII C program text
فایل رمز نگاری Shell شده را اجرا کنید
حال فایل رمزنگاری شده را برای اینکه مطمئن شویم همانگونه که باید کار میکند اجرا میکنیم
$ ./random.sh.x How many random numbers do you want to generate? 3 7489 10494 29627
لطفا توجه داشته باشید که فایل باینری به تنهایی وابسته به در دسترس بودن shell مورد استفاده برای اجرا است ( اولین خط تعین شده در فایل random.sh در اینجا : /bin/bash )
ست کردن تاریخ انقضا برای اسکریپت Shell
با استفاده از shc شما میتوانید تاریخ انقضا برای اسکریپت bash تعریف کنید ، بعد از تاریخ انقضا اگر کسی کد را اجرا کند پیام خطا دریافت خواهند کرد.
فرض میکنیم شما نمیخواهید کاربر کد را بعد از 31/12/2017 اجرا کند ( من از تاریخی که الان گذشته برای تست استفاده کردم) یک فایل شِل اسکریپت جدید با shc -c جهت تعیین تاریخ انقضا ایجاد کنید فرمت تاریخ انقضا باید به شکل dd/mm/yyyy باشد
$ ./shc -e 31/12/2011 -f random.sh
در این مثال اگر کسی بخواهد کد را بعد از تاریخ ذکر شده اجرا کند ، خطای زیر را دریافت خواهد رکد
$ ./random.sh.x ./random.sh.x: has expired! Please contact your provider
اگر بخواهید پیام سفارش در زمان انقضا نمایش بدهیدمیتوانید از آپشن -m استفاده کنید ( به همراه آپشن -e که بالاتر توضیح داده شد و در پائین هم نمونه ذکر شده است)
$ ./shc -e 31/12/2019 -m "Contact admin@rasanegar.com for new version of this script" -f random.sh $ ./random.sh.x ./random.sh.x: has expired! Contact admin@rasanegar.com for new version of this script
ایجاد فایل رمزنگاری شده Bash با قابلیت توزیع مجدد
به غیر از آپشن های -e و -m میتوانید از آپشنهای زیر هم استفاده کنید
- r امنیت را طوری تنظیم میکند که یک فایل باینری قابل اجرای مجدد و توزیع روی سیستم های دیگر که سیستم عامل یکسان با سیستمی که روی آن کامپایل شده است را تولید کند
- T اجازه میدهد که فایل باینری تولید شده با برنامه هایی مانند strace و ltrace قابل trace باشد
- v خروجی توضیحی فرایند
معمولا ممکن است بخواهید از هر دو آپشن -T و -r برای تولید کد رمزنگاری شده قابل trace و توزیع مجدد Shell Script به شکلی که در ادامه نشان داده شده ست استفاده کنید
$ ./shc -v -r -T -f random.sh shc shll=bash shc [-i]=-c shc [-x]=exec '%s' "$@" shc [-l]= shc opts= shc: cc random.sh.x.c -o random.sh.x shc: strip random.sh.x shc: chmod go-r random.sh.x $ ./random.sh.x How many random numbers do you want to generate? 3 28954 1410 15234
در نهایت ارزش تکرار داد که بگویم : در وهله اول نباید کد شل را رمزنگاری کنید ، اما اگر تصمیم گرفتید آن را با shc رمزنگاری (encrypt ) کنید ، لطفا مد نظر داشته باشید که یک فرد باهوش میتواند کد اصلی شِل اسکریپت را از فایل باینتری رمزنگاری شده با shc تولید کند
موفق باشید، مهران صالحی ، رسانگار