وبلاگ رسانگار
با ما حرفه ای باشید

سرور مجازی NVMe

چطور کدهای Bash را رمزنگاری (Encrypt) کنیم

چطور کدهای اجرایی Bash در محیط لینوکس را رمزنگاری کنیم

0 ۳۱۷
زمان لازم برای مطالعه: 5 دقیقه

سوال : چطور میتواند کدهای شل بش اسکرییپ را در محیط لینوکس رمز نگاری ( انکریپت ) کنم  ؟ فایل شِل حاوی پسورد است و من نمیخواهم کسانی که دسترسی اجرا دارند کد شل را ببینند و پسورد را بدست بیاورند ، راهی هست که شل اسکریپت را انکریپت کنیم ؟

پاسخ : ابتدا ، بهترین راه حل این است که فایل بش را رمزنگاری نکنید ، بهتر است کد خود را به خوبی مستند کنید تا هر کس که آن را مشاهده می کند کاری که کد انجام میدهد را دقیقا درک کند ، اگر حاوی اطلاعات حساس مانند پسورد است ، بهتر است راه دگیری برای نوشتن کد پیدا کنید تا نیاز به کد کردن آن نباشد

اگر همچنان اصرار دارید که کد خود را رمزنگاری کنید ، از ابزاری 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 آن را انکریپت کنیم ایچاد کنید

پیشنهاد می‎کنیم بخوانید:
دستورات لینوکس برای مبتدیان - SUDO

برای تست ، یک فایل به اسم random.sh ایجاد میکنیم که خروجی اجرای آن ایجاد اعداد تصادفی ( بختکی ) است ، شما باید مشخص کنید که چه تعداد عدد تصادفی میخواهید ایجاد کنید

$ vi random.sh

#!/bin/bash

echo -n "How many random numbers do you want to generate? "
read max

for (( start = 1; start 
 $ ./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 )

پیشنهاد می‎کنیم بخوانید:
30 نمونه دستور اسکریپت 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 تولید کند

موفق باشید، مهران صالحی ، رسانگار

 

دیدگاه شما در خصوص مطلب چیست ؟

آدرس ایمیل شما منتشر نخواهد شد.

لطفا دیدگاه خود را با احترام به دیدگاه های دیگران و با توجه به محتوای مطلب درج کنید