آسیب پذیری امنیتی خطرناک Bash، خطرناک تر از خون ریزی قلبی :
محقق امنیتی استفان چازیلاس، آسیب پذیری بحرانی را در نرم افزار Bash، کشف کرده است که پیرامون نحوه ی عمل کرد متغیرهای محیطی می باشد.
به گزارش پایگاه اخبار امنیتی فن آوری اطلاعات و ارتباطات، این آسیب پذیری با شناسه ی CVE-2014-6271 معرفی شده است و در تمام توزیع های لینوکس از جمله توزیع دبیان وجود دارد و به گفته ی کارشناسان امنیتی این آسیب پذیری به اندازه ی آسیب پذیری Heartbleed مهم و پرخطر است و می تواند تاثیر بسیار شگفتی در دنیای اینترنت داشته باشد.
bash مخفف عبارت Bourne again shell ابزاری شبیه به شِل در سامانه های یونیکسی است که احتمالاً محبوب ترین ابزار کاربران لینوکس نیز می باشد.
در سامانه عامل های لینوکسی، متغیر های محیطی راهی را برای تاثیر گذاری در رفتار یک نرم افزار ایجاد می کنند، این متغیر ها معمولاً دارای یک نام و یک مقدار منتسب به نام هستند. در سامانه عامل لینوکس، غالب نرم افزار ها در هنگام اجرا یک نسخه از بَش را در پشت صحنه اجرا می کنند و از آن برای ارتباط با یک کاربر راه دور استفاده می کنند.
آسیب پذیری موجود در بَش به این مسئله مربوط است که متغیر های محیطی می توانند با مقادیر اولیه ی مخربی قبل از صدا زدن نرم افزار بَش ایجاد شوند. این متغیر ها می توانند به جای مقادیر مجاز شامل کد باشند که به محض اجرای بَش این کد نیز اجرا می شود.
نام متغیر محیطی که حاوی کد است مهم نیست و تنها محتوا و یا مقدار این متغیر است که می تواند مخرب باشد و به همین دلیل این آسیب پذیری می تواند در بسیاری از نرم افزار ها تاثیرگذار باشد، در ادامه برخی نرم افزار های مهم بررسی شده است :
• ForceCommand: ابزاری برای پیکربندی sshd به منظور ایجاد قابلیت های اجرای محدودشده ی فرمان برای کاربران راه دور است. آسیب پذیری تازه کشف شده می تواند محدودیت اجرای فرمان را دور بزند و امکان اجرای هر فرمانی را فراهم کند. بسیاری از مخزن های نرم افزاری Git و Subversion از یک شِل با این پیکربندی استفاده می کنند. البته استفاده ی معمولی از OpenSSH امکان سوء استفاده از این آسیب پذیری را برای مهاجم باز نمی کند، چراکه در این حالت کاربر امکان اجرای همه ی فرمان ها را دارد.
• کارگزار های Apache: در صورتی که این کارگزارها با از mod_cgi و mod_cgid استفاده کنند در مقابل این آسیب پذیری مصون نیستند، اسکریپت های CGI معمولاً یا در بَش توسعه پیدا کرده اند و یا یک شِل جدید برای اجرا باز می کنند.
• اسکریپت های PHP: این اسکریپت ها با متغیر mpd_php حتی اگر برای اجرا یک شِل جدید باز کنند منجر به سوء استفاده از این آسیب پذیری نخواهند شد.
• سرویس گیرندگان DHCP: این سرویس گیرندگان برای پیکربندی سامانه باید یک اسکریپت شِل را اجرا کنند که متغیر های آن می تواند از یک کارگزار که به صورت بالقوه آلوده شده است گرفته شود. که در نهایت منجر به اجرای فرمان های مخرب در ماشین سرویس گیرنده می شود.
مانند همه ی زبان های برنامه نویسی، بَش نیز دارای توابع است، اگرچه در بسیاری از مواقع کارایی این توابع به اندازه ی زبان های برنامه نویسی سطح بالا نیست، ولی به هرحال این احتمال وجود دارد که یک تابع به عنوان مقدار متغیر محیطی درج شود.
تعریف یک تابع به عنوان متغیر محیطی زمانی امکان پذیر است که کد اضافی در انتهای تعریف تابع افزوده شود، مانند مثال زیر:
?
1
2
3
$ env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
vulnerable
this is a test
برای رفع چنین آسیب پذیری لازم است توسعه دهندگان در نرم افزار های خود این تضمین را ایجاد کنند که امکان افزودن کد اضافی در انتهای تابع وجود ندارد، بنابراین اگر کد مخرب بالا در یک بَش وصله شده اجرا شود، خروجی مانند مثال زیر خواهد بود:
?
1
2
3
4
$ env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
bash: warning: x: ignoring function definition attempt
bash: error importing function definition for `x'
this is a test
کد تایید مفهوم این آسیب پذیری :
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
je@tiny:~$ cat > bash-is-fun.c
/* CVE-2014-6271 + aliases with slashes PoC - je [at] clevcode [dot] org */
#include <unistd.h>
#include <stdio.h>
int main()
{
char *envp[] = {
"PATH=/bin:/usr/bin",
"/usr/bin/id=() { "
"echo pwn me twice, shame on me; }; "
"echo pwn me once, shame on you",
NULL
};
char *argv[] = { "/bin/bash", NULL };
execve(argv[0], argv, envp);
perror("execve");
return 1;
}
^D
je@tiny:~$ gcc -o bash-is-fun bash-is-fun.c
je@tiny:~$ ./bash-is-fun
pwn me once, shame on you
je@tiny:/home/je$ /usr/bin/id
pwn me twice, shame on me
لازم به ذکر است که این آسیب پذیری در سامانه عامل های لینوکسی از جمله توزیع های RedHat، دبیان، CentOS و اوبونتو وجود دارد و این توسعه دهندگان در حال ارائه ی وصله می باشند که باید به سرعت وصله ها در کارگزار ها نصب شوند چرا که امکان سوء استفاده از این آسیب پذیری در مقیاس بسیار گسترده ای وجود دارد.
در صورت نیاز برای رفع این آسیب پذیری از دستور زیر استفاده کنید :
?
1
yum -y update bash
برای اطلاعات بیشتر :
https://securityblog.redhat.com/2014/09/24/bash-specially-crafted-environment-variables-code-injection-attack/https://access.redhat.com/articles/1200223 https://access.redhat.com/solutions/1207723همیشه موفق باشید
جزییات بیشتر :
http://buy.securehost.ir/knowledgeba...article&id=653 https://securityblog.redhat.com/2014...ection-attack/ https://access.redhat.com/solutions/1207723 https://news.ycombinator.com/item?id=8362171 [CentOS-announce] CESA-2014:1293 Critical CentOS 6 bash Security Update