گنجه

# tail -f /var/log/experience

بایگانی برای آذر, ۱۳۸۷

از وقتی با Greasemonkey آشنا شده‌ام توقعم از تار1 خیلی بالا رفته.

با این افزونهٔ Firefox می‌شه در طرف مخدوم2، به هر صفحه‌ای کدهای JavaScript دل‌خواه رو اضافه کرد. علاوه بر کلی دست‌نوشتهٔ3 آماده که توی http://userscripts.org براش وجود داره، خودمون هم می‌تونیم به راحتی براش دست‌نوشته بنویسیم. حالا اگر قدرت JavaScript رو بیاری تو ذهنت می‌بینی که چه کارها می‌شه به کمک این میمون چرب (!) کرد.

برای شروع ماجراجویی، کمی از http://diveintogreasemonkey.org رو خوندم. نقطهٔ شروع بسیار خوبی بود.

یک دست‌نوشته به نام فارسنده یا Persianizer که به شیوهٔ بِکَن-بچسبون4 ساخته‌ام، همهٔ رقم‌های انگلیسی و «ي» و «ك»های عربی توی صفحهٔ بارگذاری شده رو به معادل فارسیشون تبدیل می‌کنه. بس که اون صفحه‌های فارسی پر از «ي» حالم رو بد می‌کنه! فقط موقع استفاده حواست باشه پایگاه‌هایی که قراره فارسنده روشون کار بکنه رو خوب انتخاب کنی؛ پیش‌فرض‌هاش خوب نیستند.

البته یکی از شرایط من (و خیلی‌های دیگر) برای استفاده از یک فن‌آوری، انحصاری نبودنش هست که خوش‌بختانه افزونه‌هایی سازگار با Greasemonkey برای مرورگرهای مهم دیگه (از جمله Konqueror) هم وجود داره.

نکتهٔ پایانی این که اگر کاربر Greasemonkey باشی، افزونهٔ Greasefire هم احتمالاً برات جالب هست.

این هم فهرست دست‌نوشته‌های محبوب من:
http://userscripts.org/users/73214/favorites

  1. Web []
  2. Client Side []
  3. Script []
  4. Copy-Paste []

ادامه از هرزنامه‌نگار0 نبودیم که شدیم [1]

اول یک تصویر ببینید؛ تصویر وضعیت صف شهاب در دوران هرزنامه‌نگاری: (کلیک کنید و بزرگش رو ببینید)

وضعیت صف شهاب

وضعیت صف شهاب

بعد از آروم شدن اوضاع، به رغم تمهیدات جدید، هم‌چنان نگران تکرار فاجعه بودم. از این رو چون فکر کردم لابد طرف به روش قوای بی‌فکر1 گذرواژه2های کاربرها رو در آورده، به فکر تقویت گذرواژه‌ها افتادم. در این مواقع John the Ripper به کار می‌آد. بستهٔ3 john رو نصب کردم. بعد گذرواژه‌های کاربرها رو از توی پایگاه داده4 MySQL داخل یک پرونده5 ریختم:

SELECT user,pass FROM mailbox INTO OUTFILE '/tmp/pass';

و دادم دست جان تا بی‌رحمانه گذرواژه‌های ضعیف رو پیدا کنه. دیدن خروجیش واقعاً جالب بود! اصلاً فکر نمی‌کردم این همه ۱۲۳ و امثاله پیدا بشه. به‌تره بگم غم‌انگیزناک بود!

من که دیگه حسابی قاطی کرده بودم، یک رایانامه6 زدم به همهٔ کاربرها و بهشون یاد دادم چه جور گذرواژه‌ای خوبه و ازشون خواهش کردم که اگر گذرواژه‌شون قوی نیست، هر چه سریع‌تر عوضش کنند. از طرفی به کمک افزونه7ای که توی SquirrelMail برای تغییر گذرواژه ازش استفاده می‌کنم، گذرواژه‌هایی که یافته شده بودند رو ملزم به تغییر کردم. البته به همین سادگی نبود! باید یک ستون به جدول کاربرها اضافه می‌کردم:

ALTER TABLE mail ADD COLUMN (chpass bool NOT NULL DEFAULT false);

مدتی بعد، یکی از دوستان که گه‌گاه پی‌گیر مسائل مربوط به خادم8هامون هست، بهم گفت که برای چند تا از کاربرهای شهاب، رایانامه‌ای از wwwadm@badhost اومده بوده (badhost یکی دیگه از خادم‌های رایانامهٔ شبکهٔ ماست که دامنه9اش بسیار شبیه دامنهٔ شهاب هست) و ازشون خواسته بوده گذرواژه2شون رو اعلام کنند. اون بندگان خدا هم خیلی راحت این کار رو کرده بودند. به این روش کسب اطلاعات، phishing می‌گن که یکی از روش‌های معروف از نوع مهندسی اجتماعی10 هست. به عنوان معادل فارسی phishing، عبارت «توراندازی11» رو پیش‌نهاد می‌کنم، که شبیه «تیراندازی» هم هست!

این جا بود که معلوم شد هرزنامه‌نگار قصهٔ ما، گذرواژه‌ها رو از کجا آورده بوده. حالا دیدید اون جا که توی تصویر بالا گفتم «بعداً می‌فهمین» چه اتفاقات مهمی داشته می‌افتاده؟!

راستی یادم باشه بعداً ماجرای badhost رو براتون تعریف کنم.

… ادامه دارد …

نکتهٔ جانبی: تصمیم گرفتم در نمایه‌دهی به عنوان‌ها هم از اعداد فارسی استفاده کنم. برای مثال تفاوت عنوان این مطلب، با عنوان مطلب قبلی از همین دنباله رو مقایسه کنید. راستی فهمیده‌اید که چرا از قالب [i] استفاده می‌کنم که!

  1. Spammer []
  2. Brute Force []
  3. Password [] []
  4. Package []
  5. Database []
  6. File []
  7. E-mail []
  8. Plugin []
  9. Server []
  10. Domain []
  11. Social Engineering []
  12. Phishing :D []

اگر برنامه‌نویس C++‎ باشی، حتماً تا حالا مورد آزار و اذیت پیغام‌های خطای سرسام‌آور هم‌گردان0 در مورد STL قرار گرفته‌ای. مثلاً این:

testmm2.cpp:31: error: no matching function for call to ‘std::multimap<int*, int, std::less<int*>, std::allocator<std::pair<int* const, int> > >::insert(int)’
/usr/include/c++/4.3/bits/stl_multimap.h:407: note: candidates are: typename std::_Rb_tree<_Key, std::pair<const _Key, _Tp>, std::_Select1st<std::pair<const_Key, _Tp> >, _Compare, typename _Alloc::rebind<std::pair<const _Key, _Tp> >::other>::iterator std::multimap<_Key, _Tp, _Compare, _Alloc>::insert(const std::pair<const _Key, _Tp>&) [with _Key = int*, _Tp = int, _Compare = std::less<int*>, _Alloc = std::allocator<std::pair<int* const, int> >]
/usr/include/c++/4.3/bits/stl_multimap.h:431: note:                 typename std::_Rb_tree<_Key, std::pair<const _Key, _Tp>, std::_Select1st<std::pair<const _Key, _Tp> >, _Compare, typename _Alloc::rebind<std::pair<const _Key, _Tp> >::other>::iterator std::multimap<_Key, _Tp, _Compare, _Alloc>::insert(typename std::_Rb_tree<_Key, std::pair<const _Key, _Tp>, std::_Select1st<std::pair<const _Key, _Tp> >, _Compare, typename _Alloc::rebind<std::pair<const _Key, _Tp> >::other>::iterator, const std::pair<const _Key, _Tp>&) [with _Key = int*, _Tp = int, _Compare = std::less<int*>, _Alloc = std::allocator<std::pair<int* const, int> >]


حالا این یکی بود. وقتی ده-پونزده تا از این‌ها یک‌جا رخ می‌ده، خیلی افتضاح می‌شه.

مدت‌ها با این مشکل کنار اومده بودم و دردش رو تحمل می‌کردم. اما اخیراً یک راه نجات یافتم: ابزاری به نام STLFilt. یک نرم‌افزار آزاد هست که خروجی هم‌گردان C++‎ رو می‌گیره و اون پیغام‌های وحشت‌ناک رو مهربون می‌کنه. مثلاً پیغام بالا رو تبدیل می‌کنه به این:

testmm2.cpp:31: error: No match for ‘multimap<int *, int>::insert(int)’
stl_multimap.h:407: candidates are: map<int *, int>::iter multimap<int *, int>
    ::insert(const pair<const int *, int> &)
stl_multimap.h:431: map<
        int *, int
    >::iter multimap<
        int *, int
    >::insert(map<int *, int>::iter, const pair<const int *, int> &)

آخش! حالا می‌شه خوندش!

برای استفاده از STLFilt اول باید بستهٔ مربوط به هم‌گردانت رو بگیری. مثلاً gstlfilt.zip برای G++‎. توش کلی پرونده هست که همه رو بی‌خیال می‌شی به جز gSTLFilt.pl که اصل کار رو انجام می‌ده. از stdin می‌خونه و توی stdout می‌نویسه. کاری که من کردم این بود1:

sudo su
F=/usr/local/bin/stlfilt.pl
echo '#!/usr/bin/perl' >$F
cat gSTLFilt.pl >>$F
chmod +x $F

و برای استفاده:

make 2>&1 | stlfilt.pl

برای این که هر بار نخوام stderr دستور ساخت2 (مثلاً make) رو به stdoutش redirect3 کنم، دست‌نوشتهٔ4 /usr/local/bin/stlfilt رو با این محتوا ساختم:

#!/bin/sh
"$@" 2>&1 | stlfilt.pl

و chmod +x هم یادم نره. ;)
حالا این‌جوری استفاده می‌شه:

stlfilt make

با دست‌نوشته‌ها زندگی زیباتره! :)

ویرایش: امید آن می‌رود که با معرفی «مفهوم»5ها در C++0x (به زودی!) کل مشکل از بیخ حل بشه و دیگه نیازی به ابزار اضافی نباشه.

  1. Compiler []
  2. مثل همیشه نقل به مضمون و آزمایش‌نشده []
  3. Build []
  4. معادل خوبی براش داری بگو []
  5. Script []
  6. Concept []

گاهی واقعیت اون‌قدر زشته که اگر واقع‌بین باشی به بدبینی متهم می‌شی.


ادامه از هرزنامه‌نگار نبودیم که شدیم [0]

فردا شد و هم‌چنان پیغام می‌رسید که «شهاب خرابه!». شروع کردم به خوندن نگاره0های خادم1های رایانامه2، شامل Postfix و دوستان. (حالا فهمیده بودم اون همه نگاره از کجا اومده بود!) دیری نپایید که متوجه شدم اسم شهاب ما هم رفته توی بدها! یعنی توی فهرست سیاه3 هرزنامه‌نگار4ها. با بررسی هرزنامه‌هایی که از طرف شهاب فرستاده شده بود، دریافتم که هرزنامه‌نگار قصهٔ ما گذرواژهٔ5 حساب6 چند تا از کاربرها رو به دست آورده و داره ازشون برای ارسال هرزنامه‌هاش استفاده می‌کنه بی‌حیا!

این جا بود که دو کار کردم: یکی این که حساب‌های تسخیرشده رو غیر فعال کردم و دیگری، رفتم که شهاب رو از فهرست‌های سیاه خارج کنم. خوبیش این هست که وقتی اسمت توی فهرست سیاه باشه، خادم رایانامهٔ اون طرف خط که جوابت می‌کنه، بهت می‌گه چرا و کدوم فهرست. معمولاً فهرست‌های سیاه هرزنامه‌نگارها این جوری هستند که بعد از چند روز که دیگه از خادمی، هرزنامه‌ای گزارش نشد، خودکارانه از فهرست سیاه حذفش می‌کنند. از طرفی همهٔ اون‌هایی که من دیدم با نشانی IP کار می‌کردند و کاری به نام دامنه7 نداشتند. به میمنت این ماجرا بود که بالأخره حساب‌های postmaster و abuse رو به طور جدی فعال کردم. در این لحظه سیل گزارش‌های هرزنامه بود که به abuse سرازیر شد.

حالا دیگه هر هرزنامه‌ای که از شهاب خارج بشه، به شرطی که کسی گزارشش کنه، خبرش سریع بهم می‌رسه و می‌تونم پی‌گیری کنم. ان‌شاءالله از این به بعد توطئه در نطفه خفه می‌شه! بی‌حکمت نیست که هر دامنه‌ای که رایانامه می‌گیره باید به حکم RFC8 این صندوق‌های رایانامه رو داشته باشه.

… هنوز ادامه دارد! …

  1. Spam []
  2. Server []
  3. E-mail []
  4. Blacklist []
  5. Spammer []
  6. Password []
  7. Account []
  8. Domain Name []
  9. Request for Comments []


بسم الله الرحمن الرحیم

راه‌رو گر صد هنر دارد توکل بایدش

برگه‌ها

رایانه‌ای‌ها

آمار

در کل 30 بیننده برای این صفحه
امروز 3 بیننده
در کل 2037 بیننده
از 2009/09/9