۱۳۸۹ مرداد ۷, پنجشنبه

میان‌برنامه - حفره داغ LNK ویندوز

این در واقع یک خبر است و نه یک پست و فقط به دلیل اهمیت موضوع درج می‌شود.

اولین بار سه چهار روز پیش در وبلاگی نام حفره امنیتی LNK ویندوز را شنیدم که در تمامی نسخه‌های آن از XP و Vista گرفته تا 7 موجود است.
امروز که فرصت یافتم کمی درباره آن بیشتر بررسی کنم، به نکات زیر برخورد کردم:

  1. این حفره بعد از این کشف شد که به صورت گسترده توسط بدافزارها مورد استفاده قرار گرفته بود. پس از کشف نیز توجه زیادی را جلب کرده و به سرعت بدافزارهای جدیدی به کمک آن منتشر می‌شوند.
  2. این حفره در تمامی نسخه‌های ویندوز موجود است و تاکنون مایکروسافت برای رفع آن بسته‌ای منتشر نکرده است. (+)
    هشدار:
    بنابراین حتی اگر ویندوزتان بروز هم باشد در خطر هستید.
  3. برای جلوگیری از آلوده شدن کامپیوترتان و تا زمانیکه مایکروسافت بالاخره بسته مناسب را منتشر می‌کند، می‌توانید از نرم‌افزار Windows Shortcut Exploit Protection Tool (در کنار آنتی‌ویروس‌تان) بهره بگیرید که دیروز توسط تیم امنیتی آنتی‌ویروس Sophos منتشر شده است.
  4. با بهره‌گیری از این حفره، کد مخرب هنگامیکه ویندوز صرفا بخواهد شمایل (Icon) یک فایل lnk (فایل‌های میانبر) را نمایش دهد اجرا می‌شود. بدین ترتیب کافیست شما شاخه‌ای را که فایل مخرب در آن قرار دارد «رویت» کنید تا کامپیوترتان آلوده شود.

    این شاخه می‌تواند یک حافظه USB یک شاخه به اشتراک گذاشته شده در شبکه یا حتی اینترنت باشد. همچنین ممکن است فایل مخرب داخل فایل doc ورد یا مانند آن جایگذاری شده باشد.

منبع و اطلاعات بیشتر

بروزرسانی 1389/5/12: مایکروسافت patch امنیتی مرتبط با این حفره را منتشر کرد. (MS10-046)
بنابراین اکنون می‌توانید نخست ویندوزتان را بروز کنید و سپس نرم‌افزار Windows Shortcut Exploit Protection Tool را پاک کنید. :)



کلمات کلیدی: AntiVirus, LNK, Shortcut, Exploit, Rootkit, Windows, آنتی ویروس, امنیت, روت کیت, ویندوز, میان‌برنامه, میانبر, حفره

۱۳۸۹ تیر ۲۷, یکشنبه

میان‌برنامه - درباره Rootkitها و ناگفته‌هایی از پرونده 1

تعریف مساله

مدتی پیش در مورد کرم کانفیکر (کیدو) مطلبی نوشتم. یکی از موضوعاتی که به منظور طولانی نشدن مطلب از پرداختن به آن خودداری کردم و فقط اشاره‌ای به آن شد، توضیحی در مورد روت‌کیت (Rootkit) بودن این کرم بود.
روت‌کیت در اصطلاح امنیت نرم‌افزار، به نوعی بدافزار (Malware) گفته می‌شود که با دستکاری کردن برخی توابع سیستم‌عامل، تلاش می‌کند حضور خود را از دید پنهان کند و یا در کار آن خللی ایجاد کند. روت‌کیت در واقع از شوم‌ترین انواع بدافزار است، چرا که در تئوری اگر کامپیوتری مبتلا به یک روت‌کیت قوی شود هرگز و با هیچ ابزاری از درون سیستم‌عامل نمی‌توان از وجود روت‌کیت مطلع شد یا آن را از بین برد. (البته همواره می‌توان از خارج از سیستم‌عامل و به کمک یک سیستم‌عامل سالم و بدون روت‌کیت، آن را شناسایی کرد)
به عنوان مثال: یک روت‌کیت می‌تواند فایل‌های مربوط به خود را از چشم سیستم‌عامل و تمامی برنامه‌ها (مثل آنتی‌ویروس) پنهان کند.
اما در عمل شناخت روت‌کیت از درون سیستم‌عامل میسر است، چرا که روت‌کیت‌ها عملا قادر به شبیه‌سازی کلیه توابع مرتبط سیستم‌عامل نیستند و فقط برخی از متداول‌ترین آنها را تغییر می‌دهند. از این رو می‌توان با مقایسه رفتار توابع مختلف سیستم و یافتن ناهمگونی در آنها به وجود روت‌کیت پی برد. بر همین اساس برنامه‌هایی وجود دارند که کارشان تشخیص روت‌کیت‌ها (شناخته شده و حتی ناشناخته) است.
در همان مثال قبل: معمولا می‌توان با رفتن به سراغ توابع سطح پایین کار با هارد دیسک، و مطابقت دادن ساختار فایل‌سیستم با آنچه سیستم‌عامل نشان می‌دهد ناهماهنگی‌ها را کشف و به وجود روت‌کیت پی برد.

مثال واقعی

کرم کانفیکری که در پرونده 1 با آن برخورد داشتیم نیز دارای یک بخش روت‌کیت بود که، با دستکاری توابع سیستمی، از ارتباط با سایت‌های امنیتی جلوگیری می‌کرد. اتفاقا نحوه کشف آن بسیار جالب بود که در ادامه مطلب می‌خوانید:
هنگامیکه متوجه شدم کامپیوتر سایت microsoft.com را نمی‌آورد، برای فهمیدن علت از دستور ping استفاده کردم. نتیجه چنین بود:
> ping microsoft.com
Ping request could not find host microsoft.com. Please check the 
name and try again.
که نشان می‌دهد مشکلی در سرویس DNS وجود داشته و موفق نشده است آدرس سایت را پیدا کند. بنابراین با دستور nslookup موضوع را بررسی کردم و با کمال تعجب با پاسخی مانند زیر روبرو شدم:
>nslookup microsoft.com
Server:  google-public-dns-a.google.com
Address:  8.8.8.8

Non-authoritative answer:
Name:    microsoft.com
Addresses:  207.46.197.32, 207.46.232.182
وقتی یکبار دیگر ping را اجرا کردم و باز همان پاسخ قبلی را دریافت کردم یقین پیدا کردم که موضوع از بدافزاری غیرعادی نشات می‌گیرد. بسیاری از بدافزارها مانع دسترسی به سایت‌های امنیتی می‌شوند، اما این کار معمولا با دستکاری فایل hosts و برگرداندن یک آدرس جعلی انجام می‌گیرد. در حالیکه در اینجا ping اصلا آدرسی را پیدا نمی‌کرد و این نشان می‌داد این تغییر به نحو هوشمندانه‌تری (و احتمالا با تغییر توابع سیستمی) انجام شده است.
نهایتا هنگامیکه برنامه Kido Killer مشغول پاکسازی کرم بود، پیغامی را مبنی بر پاکسازی یکی از توابع سرویس DNS نمایش داد که تاییدی بر تردیدهای قبلی بود.

کلمات کلیدی: Conficker, Kido, Rootkit, Windows, Worm, امنیت, روت کیت, ویندوز, کانفیکر, کرم, کیدو

۱۳۸۹ تیر ۱۳, یکشنبه

ترفند 2 » جابجا کردن فایل در SVN به شیوه صحیح

تعریف مساله

اگر نمی‌دانید SVN چیست بی‌خیال این پست بشوید و در عوض اینجا یا اینجا را بخوانید.

اگر تا به حال برای مدیریت فایل‌های پروژه از نرم‌افزار SVN (SubVersioN) استفاده کرده باشید، احتمالا به این موضوع برخورد داشته‌اید که یک فایل را جابجا کرده‌اید یا نامش را تغییر داده‌اید و سپس هنگامیکه می‌خواستید تغییرات را ارسال (commit) کنید، متوجه شده‌اید که به جای اینکه از دستورات svn برای جابجا کردن فایل استفاده کنید، از دستورات سیستم فایل استفاده کرده‌اید.

در این حالت SVN به مشکل برمی‌خورد: SVN نمی‌تواند بفهمد که شما فایل را جابجا کرده‌اید، بنابراین این جابجایی را به صورت دو تغییر می‌بیند: اولا فایل اصلی گم‌شده است. دوما فایل جدیدی اضافه شده است که تحت مدیریت نسخ قرار ندارد.

شما می‌توانید این تغییرات را ارسال کنید که معادل یک حذف/اضافه شدن یک فایل جدید به مخزن (Repository) است. اما این وضعیت با یک جابجایی(move) متفاوت است، چرا که در جابجایی سابقه تغییرات فایل حفظ می‌شود ولی در یک حذف/اضافه دو فایل به همدیگر هیچ ارتباطی ندارند و سابقه آنها از همدیگر مستقل است.

راه‌حل ویندوزی

این وضعیت به کمک TortoiseSVN در ویندوز به سادگی قابل حل است:
کافیست در پنجره ارسال، دو فایل قدیم و جدید را انتخاب کنید و از منوی کلیک راست، گزینه Repair Move را انتخاب کنید. شرح بیشتر

راه‌حل لینوکسی

در لینوکس اما وضعیت اندکی متفاوت است. حقیقتش من هیچ رابط کاربری دلچسبی برای SVN در لینوکس سراغ ندارم. با اینکه در حال حاضر SVN جزء لاینفک برنامه‌نویسی متن‌باز است و خودش نیز زاده این فرهنگ است و طبیعتا انتظار می‌رود برنامه‌های مناسبی برای آن در لینوکس موجود باشد؛ و با اینکه برنامه‌های بیشماری در این رابطه برای لینوکس نوشته شده‌اند، به نظر من هیچ یک کارایی TortoiseSVN را ندارند. برنامه‌هایی مثل: RabbitVCS, RapidSVN, SmartSVN, Subclipse و …

از طرف دیگر معلوم نیست امکان Repair Move در کدامیک از این برنامه‌ها وجود دارد یا خیر. نتیجه اینکه تصمیم گرفتم برای حل این مشکل دست به کار شوم و یک اسکریپت ساده بنویسم. حاصل کار اسکریپت svnfixmove است که از طریق خط فرمان قابل استفاده است.

فراخوانی اسکریپت بسیار شبیه استفاده از دستور svn move است. مثلا اگر اسکریپت را در فولدر خانه (home) خود قرار دهید:

~/svnfixmove oldfile newfile

اول بررسی می‌کند که فایل oldfile در وضعیت Missing باشد و فایل newfile نیز در وضعیت Unversioned قرار داشته باشد و فقط در این صورت، وضعیت فایل را «تصحیح» می‌کند.

برای استفاده از اسکریپت کافیست متن آن را از کادر زیر کپی کنید و در یک فایل ذخیره کنید. سپس فایل را به عنوان فایل قابل اجرا علامت بزنید:

#!/bin/sh
#
# By: Sajjad Naficy (2010/Jul/4)
#
# This work is in public domain. You may use/modify/redistribute 
# it anyway you want. However a mention of the original creator 
# is appreciated.
# 
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
#

(svn st $1|grep "^\!") >/dev/null
if [ $? -ne 0 ]; then
  echo "$1 must be missing." 
  exit 1
fi
(svn st $2|grep "^\?") >/dev/null
if [ $? -ne 0 ]; then
  echo "$2 must be unversioned." 
  exit 2
fi

mv $2 $1
svn move $1 $2
کلمات کلیدی: Linux, script, subversion, svn, svn move, TortoiseSVN, Windows, اسکریپت, ترفند, لینوکس, ویندوز