چند توصیه ساده در مورد بیانیه های مربوط به جنگ سایبری

اخیرا یک ویروسی توی وزارت نفت بوده …

در اثر این حمله سرور اصلی وزارت نفت و چهار شرکت اصلی آن قطع شد و همان زمان علی نیکزاد رهبر، سخنگوی وزارت نفت گفت که “ویروس، مادربرد کامپیوتر‌ها را سوزانده و برای پاک کردن اطلاعات اقدام کرده است با این همه اطلاعات اساسی این وزارتخانه صدمه ندیده است.”

حالا من که سخنگو نیستم و این دوستان هم بودجه های میلیاردی دارن برای مقابله با جنگ نرم یا راه انداختن جنگ نرم فقط من یک چند توصیه دوستانه می کنم که مالیات و نفت ما رو بهتر مصرف کنن و حداقل شاید بدونن که جنگ سایبری اسمش قشنگه ولی اصلا به این ربطی نداره که اونها ویروس بنویسن برای از سرویس خارج کردن وب سایت ما و سوزوندن مادربردهامون و ما هم بریم رو صفحه اول سایت شهرداریشون فحش بنویسیم (: به هرحال… این توصیه ها رو برای دفعه بعد در نظر داشته باشین لطفا.

  1. تقریبا دو دهه است که دیگه نرم افزارها نمی تونن به سخت افزار یک پی سی صدمه بزنن. آخرین مورد گزارش شده مربوط بود به زمانی که می تونستیم با اسمبلی به هد یک فلاپی یا هارد دیسک دستور بدیم به موقعیت ۱- بره و همون موقع هم توی سخت افزارهای قدیمی باعث می شدیم اهرم هد گیر کنه به بدنه و در نتیجه لازم باشه با پیچ گوشتی بازش کنیم و با دست هد رو برگردونیم سر جاش.
  2. اگر ویروسی توسط دشمن وارد سیستمی بشه پر سر و صدا نیست. اینکه پلیس می یاد کامپیوتر یکی رو می بره و پس نمی ده برای یک فعال اجتماعی ضربه است ولی سوزوندن مادربرد وزارت نفت واقعا هدف هیچ ویروسی نیست
  3. اگر هم بخوان مادربرد رو بسوزونن و اطلاعات رو پاک کنن اول اطلاعات رو پاک می کنن بعد مادربرد رو می سوزونن
  4. اگر فقط بحث وب سرور است، بسیار مهمه توی بیانیه بگین که فقط وب سرور ها از کار افتاده بودن (وب سرورهای وزارت نفت ویندوزی هستن؟!!). عموم مردم ممکنه واقعا فکر کنن که چند تا سرور هست که کل وزارت نفت بهش وابسته است و اونها ویروس گرفتن! (: من و شما می دونیم این زمین تا آسمون فرق داره با اینکه چهار تا وب سرور از دسترس خارج باشن

چرا گنو/لینوکس را دوست دارم: بررسی سال های تولد در اطلاعات افشا شده ۳۰۰۰۰۰۰ کارت بانکی

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

درود. کارهای آماری جالبی میشه با داده‌ها انجام داد. به عنوان مثال احتمال این که آدمها تاریخ تولدشون رو به عنوان رمز انتخاب کنن بالاست. به دنبال ۱۳۶ بگردبن در فهرست رمزها و مقایسه‌اش کنین با هر عدد ۳ رقمی دیگه‌ای. (۱۳۷ و ۱۳۵ و ۱۳۴ هم تعدادشون بالاست). من اگه دنبال دزدی بودم از اینجا شروع میکردم.

خب ایده بسیار جالبیه و من هم امروز یک ساعتی وقت اضافی دارم برای دستگرمی لینوکس و برنامه نویسی و نوشتن یک مطلب در مورد چرا لینوکس رو دوست دارم و همینطور دادن فرصت به کسانی که می خوان مهارت های عملی خودشون توی خط فرمان رو بالا ببرن و مثل یک هکر، به ابزارشون مسط باشن.

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

اگر هنوز با من هستین بگم که اینکارها دقیقا به همین ترتیب انجام شدن و مطمئنا روش های بهتری دارن…. در اصل شما دارین چرک نویس رو می خونین تا ببینین قدم ها چطوری برداشته شدن.

در قدم اول همه صفحات بانک تجارت رو باز می کنم، با ctrl+A متنشون رو کپی می کنم و توی یک ادیتور متنی paste می کنم. من توی لینوکس برای اینکار از gedit استفاده کردم که ادیتور ساده و دم دستی گنوم است… مشخصه که اگر توی ویندوز بودم خود این یک ماجرا بود که کدوم ادیتور ممکنه بتونه این پیست رو قبول کنه و آخ نگه.

به خاطر کپی پیست من فقط متن های توی صفحه ها رو دارم… چیزهایی مثل این:

با یک دستور تمام خط هایی که توشون + هست رو جدا می کنیم. اینها خط های حاوی پسورد هستن:

grep "+" all_tejarat.txt > only_hesab_and_pass

اوه اوه! شد این:

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

رمز مخفي , شماره کارت + رمز مخفي , شماره کارت + رمز مخفي , شماره

پس من برای راحت کردن کارم، همه + ها رو تبدیل می کنم به سر خط:

jadi@jubung:~/Desktop$ sed -e "s/\s+[+]*\s*/\n/g" only_hesab_and_pass > har_password_yek_khat
jadi@jubung:~/Desktop$ head har_password_yek_khat 
رمز مخفي , شماره کارت
رمز مخفي , شماره کارت
رمز مخفي , شماره کارت 6273531000000002,73251531609013
6273531000000087,42984601252954
6273531000000105,90683196772477 6273531000000145,14810051866743
6273531000000146,61558146155078
6273531000000150,14869351127492 6273531000000151,87078051710776
6273531000000201,17221491685028
6273531000000222,32833487680537 6273531000000232,06865382135692
6273531000000232,69595659033276

راستش درست نفهمیدم چی شد! درست کار نکرد ولی بد هم نبود… حالا یک قدم دیگه باید تیکه تیکه کنم این فایل رو. فاصله ها رو به سر خط تبدیل می کنم‌ (:

jadi@jubung:~/Desktop$ sed -e "s/ /\n/g"  har_password_yek_khat > har_password_yek_khat_2
jadi@jubung:~/Desktop$ head -20 har_password_yek_khat_2 
رمز
مخفي
,
شماره
کارت
رمز
مخفي
,
شماره
کارت
رمز
مخفي
,
شماره
کارت
6273531000000002,73251531609013
6273531000000087,42984601252954
6273531000000105,90683196772477
6273531000000145,14810051866743
6273531000000146,61558146155078

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

jadi@jubung:~/Desktop$ grep  ".," har_password_yek_khat_2 | sed "s/^.*,//" > all_passwords
jadi@jubung:~/Desktop$ head all_passwords 
73251531609013
42984601252954
90683196772477
14810051866743
61558146155078
14869351127492
87078051710776
17221491685028
32833487680537
06865382135692

حله (: ببینیم چند تا پسورد داریم:

jadi@jubung:~/Desktop$ wc -l all_passwords 
118499 all_passwords

صد و هجده هزار عدد چهارده رقمی داریم که پسوردها توشونه. حالا می ریم سراغ بررسی نظریه اصلی:

مردم احتمالا سال تولدشون رو به عنوان پسورد می ذارن.

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

#!/usr/bin/perl

while ($userinput =  ) {
	chomp ($userinput);
	for($i = 0; $i <= 10 ; $i++) {
		print  substr $userinput, $i, 4;
		print "\n";
	}
}

این برنامه ورودی رو می خونه و قسمت های چهار رقمی رو ازش جدا می کنه:

jadi@jubung:~/Desktop$ echo "73251531609013" | ./find_numbers.pl 
7325
3251
2515
5153
1531
5316
3160
1609
6090
0901
9013

درست کار می کنه پس برنامه رو کامل می کنم:

#!/usr/bin/perl

@passes = ();
for($i = 0; $i <= 9999 ; $i++) {
	$passes[$i] = 0;
}


while ($userinput =  ) {
	chomp ($userinput);
	for($i = 0; $i <= 10 ; $i++) {
		$thispass = substr $userinput, $i, 4;
		$passes[$thispass] += 1;
	}
}

for($i = 0; $i <= 9999 ; $i++) {
	print $i, ",",$passes[$i],"\n";
}

این برنامه همه ورودی رو می خونه و از هر خط همه پسوردهای محتمل رو خارج می کنه و می شمره و می ره سراغ خط بعدی و در نهایت می گه هر عدد چند بار ممکن بوده به عنوان پسورد انتخاب شده باشه. بعد از اجرا خروجی اش چیزی شبیه اینه:

jadi@jubung:~/Desktop$ cat all_passwords | ./find_numbers.pl  > all_passwords_charts
jadi@jubung:~/Desktop$ head all_passwords_charts 
0,163
1,150
2,135
3,122
4,137
5,141
6,123
7,138
8,122
9,133

حالا که اینها رو داریم کافیه بریم سراغ برنامه LibreOffice برای کشیدن نمودارها. مثلا این نمودار اول است:

دیده می شه که یک جاهایی پیک داریم. بذارین یک سورت هم بکنم به ترتیب فراوانی و یک نمودار دیگه از صد تا از پرکاربردترین ها بکشیم ببینیم چی در می یاد.

اوه! نظریه دوستمون تقویت شد: مردم از سال تولد برای پسوردها استفاده می کنن (: واضح بود ولی خب از این بازی لذت بردیم و تازه یک نظریه رو هم هرچند کم،‌ تقویت کردیم. همینطوره ترکیب های «خوش دست» روی کیبورد (:

نظرتون چیه برای اختتامیه یک آمار هم بگیریم از تعداد ارقام؟ مشخصه که یک تغییر کوچیک در برنامه است فقط:

#!/usr/bin/perl

@passes = ();
for($i = 0; $i <= 9 ; $i++) {
	$passes[$i] = 0;
}


while ($userinput =  ) {
	chomp ($userinput);
	for($i = 0; $i <= 13 ; $i++) {
		$thispass = substr $userinput, $i, 1;
		$passes[$thispass] += 1;
	}
}

for($i = 0; $i <= 9 ; $i++) {
	print $i, ",",$passes[$i],"\n";
}

و نتیجه:

jadi@jubung:~/Desktop$ cat all_passwords | ./find_numbers.pl  > all_digits
jadi@jubung:~/Desktop$ cat all_digits 
0,157054
1,180318
2,169604
3,175258
4,166898
5,169252
6,162562
7,158727
8,160099
9,159214

هاه.. می بینین که احتمال استفاده از ۷ و ۹ پایینه (این رو قبلا هم شنیده بودم) و احتمالا استفاده از یک و سه بالا (: توجه داریم که در صورت درست بودن الگوریتم اعداد رندم استفاده شده برای «مخفی کردن» پسوردها، یک نویز سفید اون پایین داریم که احتمالا مساوی پخش شده.

گوگل هیچ وقت به شما ایمیل نمی‌زند که جایی لاگین کنید؛ مواظب فیشینگ باشید

الان یک ایمیل دیگه گرفتم از طرف ظاهرا گوگل که بهم می گه دیتابیس‌هاشون رو تغییر دادن و من باید دوباره لاگین کنم تا اکانتم بسته نشه. چون دفعه پیش یکی از دوستان خوب تو تله‌اش افتاده بود گفتم اسکرین شات بگیرم و بنویسم. من یک ایمیل گرفتم به این مضمون:

در بخش ۱ می بینین که می گه «اخطار! روی فلان کلیک کنید دو باره به سیستم ارد بشین تا اطلاعاتتون رو در دیتابیس سال ۲۰۱۲ گوگل نگه داریم». بخش دو هم که می گه ایمیل از بخش هشداردهی گوگل اومده.

اینکه باید چیکار کنم با یک قانون ساده حل می شه: گوگل هیچ وقت به کسی ایمیل نمی زنه که لطفا بیا فلان جا لاگین کن (: گوگل مطلقا دیتابیس هاش رو سر هر سال آپدیت نمی کنه. اکانت هیچ کس بدون اطلاع رسانی درست در تمام گوگل اکسپایر نمی شه و غیره و غیره. پس من نباید اینجا لاگین کنم و باید ایمیل رو بدون شک پاک کنم. وانمود کردن اینکه ایمیل از کس دیگه می یاد کار بسیار راحتی است (برای مثال نگاه کنید به مطلب « نکته امنیتی : به فرستنده ایمیل اعتماد نکنید)

ولی بذارین ببینیم با کی طرفیم. توی ایمیل یک لینک کوچولو هست (۳). من ماوسم رو روش نگه داشتم و نقطه چهار می بینم که این لینک به کجا می ره. ساده است دیدن اینکه این لینک به گوگل نیست. اون لینک رو کپی پیست می کنم توی براوزر (به عنوان یک نکته امنیتی روش کلیک نمی کنم بلکه کپی پیست می کنم تا مطمئن باشم می رم همونجا) و می رسم به این صفحه:

بامزه نیست؟ به دایره قرمز نگاه کنید. من حتی توی سایتی شبیه اسم گوگل هم نیستم ولی ناکس صفحه اولش رو شبیه گوگل درست کرده تا من گول بخورم. به اینکار می گن فیشینگ یا ماحی گیری (ماهی گیری تقلبی مثلا (: ))‌ اما من که توی دامش نیفتادم. شما هم نیافتین.. با همون قاعده ساده: هیچ کس به هیچ کس ایمیل نمی زنه که روی این لینک کلیک کن و اکانتت رو بده چون من دیتابیسم رو گم کردم، سال جدید شده، دوستت دارم، می خوام برات جایزه بفرستم، دارم اکانت های قدیمی رو پاک می کنم و …

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

پ.ن. اینکار هک نیست (: دزدی است. هک به معنی استفاده هوشمندانه از یک ابزار یا کشف جزییات عمیق یک چیز است (:

آپدیت:
یک دوست تذکر داد که همیشه بهتره از براوزرهای به روز و امن‌تری مثل فایرفاکس (بخصوص با افزونه اچ تی تی پی اس اوری ور) یا گوگل کروم استفاده کنیم. آدم ها ریپورت می کنن که این سایت ها دنبال دزدی پسورد هستن و بعد از مدتی این مرورگرهای معقول به شما در این مورد اخطار می دن. الان که چند ساعت از نوشتن اصل این مطلب گذشته، اون آدرس توی مرورگر موزیلا فایرفاکس اینطوری شده:

چرا به گنو/لینوکس عشق می ورزم: خاطرات یک هکر

می‌دونین که من سفر کاری خیلی زیاد می رم . در یکی از از سفرها قرار شد یک دستگاه رو با یک دستگاه دیگه عوض کنن ولی یک سوال مهم باقی موند:

جادی عزیز، ما یک دیتابیس از ۳۰۰ هزار کاربر داریم که هش شده‌اند. حالا قرار است این افراد به یک سیستم جدید منتقل شوند اما لازم است پسوردهای آنان را داشته باشیم. شرکت سازنده نرم افزار اول و شرکت نویسنده نرم افزار جدید گفته‌اند که امکان کشف اینکه یک هش چه چیزی بوده وجود ندارد. شما راه حلی می‌شناسید؟

راه حل ساده است و مجموعه ای از اسکریپت نویسی جذاب (اینبار پایتون) و ترکیب کردن دستورات خط فرمان گنو/لینوکس. جریان چیه؟‌ اینها سیصد هزار شماره تلفن و پسورد دارند که مال یک سیستم خاص است. پسوردها هش شده‌اند. یعنی چنین چیزی:

9370333**** ea9bf866d98db73eb0909fa9c1cc1b11
9370050**** fcbfab2f4cda26061ed9e3ee96a4fd61
9370750**** 6a130f1dc6f0c829f874e92e5458dced
9370001**** 9ad97add7f3d9f29cd262159d4540c96

هش یک الگوریتم یکطرفه است که می‌تونه یک استرینگ رو به یک استرینگ پیچیده تبدیل کنه. مثلا الان پسورد نفر اول بعد از هش شدن (با الگوریتم md5) تبدیل شده به ea9bf866d98db73eb0909fa9c1cc1b11. این هش غیرقابل برگشت به پسورد اصلی است اما وقتی طرف مثلا سعی می کنه لاگین کنه و پسوردش رو لاگین می‌کنه، سیستم می‌تونه پسورد جدیدا وارد شده رو هش کنه و ببینه بازهم به همون هش سابق که ذخیره کرده (یعنی ea9bf866d98db73eb0909fa9c1cc1b11) می‌رسه یا نه. این تکنیک اجازه می‌ده ما چک کنیم طرف پسورد صحیح رو داره یا نه بدون اینکه مجبور باشیم پسوردش رو جایی ذخیره کنیم. حالا قراره این سیستم با یک سیستم دیگه که با هش متفاوتی کار می کنه جایگزین بشه و لازمه بی دردسر بودن جریان اینه که بشه پسوردها رو از این هش‌ها استخراج کرد. اما هش ساخته شده تا معکوس نشه – یعنی از نظر علمی از هش نمی شه به هش‌شده رسید.

خب حالا راه حل ما چیه؟ یک راه که بهش «بروت فورث» می‌گن اینه که یکی یکی هر چیز ممکن رو هش کنیم. یعنی اول ۱ رو هش کنیم ببنیم به اون چیزی که اونجا هست می‌رسیم یا نه. بعد ۲ رو هش کنیم. بعد ۱۲ رو بعد ۱۱ رو و خلاصه هر چیز ممکن رو. اینکار یک نیروی کور است و بسیار وقت گیر. اما یک راه هوشمندانه تر هم داریم که بهش می‌گن رنگین کمان / rainbow. تکنیک رنگین کمان اینه که تمام کارهای بالا رو بکنیم (یعنی مثلا اگر اکثر افراد در موبایل از پسوردهای عددی استفاده می کنن از ۰ تا ۹۹۹۹۹ رو هش کنیم و رمز و هش اون رو بریزیم توی یک دیتابیس) و بعد یکی یکی هش ها رو توی دیتابیس سرچ کنیم و پسورد رو نشون بدیم… خب آماده‌اید؟

برای ایجاد همه پسوردهای ۰۰۰۰۰ تا ۹۹۹۹۹ و هش کردن اونها این برنامه پایتون رو نوشتم. مطمئنا می‌تونه بهتر هم نوشته بشه ولی این کار من رو راه انداخت:

#!/usr/bin/python

import MySQLdb

db = MySQLdb.connect("localhost","jadi","password","break" )

# prepare a cursor object using cursor() method
cursor = db.cursor()


for i in range(0, 10000):
    pre = '';
    if i < 10:
        pre += '0';
    if i < 100:
        pre += '0';
    if i < 1000:
        pre += '0';
    num = "%s%s" % (pre, i);
    print num;
    # execute SQL query using execute() method.
    cursor.execute("insert into rainbox values ('%s', md5('%s'));"%(num,num));

# Fetch a single row using fetchone() method.
#data = cursor.fetchone()

# disconnect from server
db.close()

همین برنامه رو برای پسوردهای ۰۰۰۰۰ تا ۹۹۹۹۹ و ۰۰۰ تا ۹۹۹ و ۰۰ تا ۹۹ و ۰ تا ۹ هم کم و زیاد کردم و رنگین کمانی شامل ۱۱۱۱۱۰ پسورد و هش اون ساختم:

mysql> select count(*) from rainbox;
+----------+
| count(*) |
+----------+
|   111110 |
+----------+
1 row in set (0.07 sec)

بعد کلیدی روی هش تعریف کردم که سرچ سریعتر بشه:

mysql> ALTER TABLE rainbox ADD primary index (hash);

حالا وقت شکستن رمزها است. فایلی دارم به اسم users.csv که این شکلی است (چهار رقم آخر تلفن ها رو ستاره کردم که پرایوسی آدم‌ها حفظ بشه):

9370333**** ea9bf866d98db73eb0909fa9c1cc1b11
9370050**** fcbfab2f4cda26061ed9e3ee96a4fd61
9370750**** 6a130f1dc6f0c829f874e92e5458dced
9370001**** 9ad97add7f3d9f29cd262159d4540c96

کافیه این رو با لایبری csv پایتون بخونم، و بعد هش هر خط رو از دیتابیسم کوئری بزنم و اگر جواب داشت توی خروجی تلفن و هش و پسورد شکسته شده رو بنویسم و اگر هم جواب این هش توی دیتابیس من نبود، جلوش بنویسم later تا بعدا از یک جای دیگه پیداش کنم.

#!/usr/bin/python

import MySQLdb
import csv

db = MySQLdb.connect("localhost","jadi","password","break" )

# prepare a cursor object using cursor() method
cursor = db.cursor()

spamReader = csv.reader(open('users.csv', 'rb'), delimiter=' ', quotechar='|')
for row in spamReader:
    tofind = row[1];
    try:
        cursor.execute("select pass from rainbox where hash = '%s'"%tofind);
        data = cursor.fetchone()[0];
        print row[0], tofind, data;
    except: #this hash was not in db
        print row[0], tofind, "later" 

# disconnect from server
db.close()

برنامه بالا رو اجرا می‌کنم و زمان می‌گیرم:

jadi@jubun:~/w$ wc -l users.csv && time python break.py > out.txt
316590 users.csv

real    0m57.226s
user    0m25.362s
sys 0m4.856s

واو! سیصد و شونزده هزار پسورد رو توی کمتر از یک دقیقه شکستیم (: یک نگاه به فایل آوت.تکست می‌گه:

jadi@jubun:~/w$ head out.txt 
93703334*** ea9bf866d98db73eb0909fa9c1cc1b11 7523
93700508*** fcbfab2f4cda26061ed9e3ee96a4fd61 8510
93707500*** 6a130f1dc6f0c829f874e92e5458dced 7496
93700013*** 9ad97add7f3d9f29cd262159d4540c96 9538
93700177*** c902514ac30b6e23dbb0c3dc80ec7d4a later
93700858*** ee676ed9ce5bd51b4452ddfbdf962ef7 later
93707848*** 8c249675aea6c3cbd91661bbae767ff1 1986

ظاهرا پسوردهای چهار رقمی مد هستن (: ظاهرا تعداد later ها هم کم نیست. بذارین یک نگاه هم به اونها بندازیم:

jadi@jubun:~/w$ grep later out.txt | wc -l 
1558

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

jadi@jubun:~/w$ grep later out.txt  > later.txt && \
                                cut later.txt -f2 -d' ' | uniq -u | wc -l 
5536

نتیجه طبیعی نیست... یعنی از شش هزار نفر فقط پونصد ششصد نفر پسورد تکراری داشتن؟ هر کسی که یک مقاله در مورد رفتار پسوردی آدم‌ها خونده باشه می دونه که این عدد غیر واقعی است.. مشکل! قبل از استفاده از دستور یونیک، باید داده‌ها رو مرتب کرد. پس یک سورت بین دستور اضافه می کنم:

jadi@jubun:~/w$ cut later.txt -f2 -d' ' | sort | uniq -u | wc -l 
767

هها! نگفته بودم؟ کل این شش هزار نفر باقیمونده، فقط از ۷۶۷ پسورد استفاده کردن. این ۷۶۷ پسورد رو می‌ریزیم توی یک فایل مجزا برای کشف کردنشون در پست بعدی.

توجه مهم! کمی از این مقاله گم شده! بعله درست خوندین ! به شکل عجیبی بخشی از مقاله در این قسمت غیب شده و نیست (: من این مقاله رو مدت های مدید قبل نوشتم ولی به خاطر احتمال لو دادن اطلاعات مشتری ها و هکربازی بچه اسکریپتی ها ارسالش نکردم. حالا چون آرمین به دردش می خورد گفتم بفرستمش ولی ظاهرا یک بخش کوچیکی اش نیست! مهم هم نیست. فدای سرمون. روش کشف بقیه پسوردها این بوده که بقیه رو از منابع اینترنت صدا بزنیم. یک سایت داریم که می شه براش یک هش فرستاد و پرسید که آیا این جواب رو داره یا نه. من اول یک تست با اون می زنم و بعد یک برنامه می نویسم که همه پسوردهای باقی مونده رو از اون صدا بزنه

و در نیتجه کافیه من یک برنامه بنویسم که همه هش‌های هنوز کشف نشده رو از فایل ورودی بخونه و اونها رو به این سایت پست کنه و منتظر خروجی بمونه. بعد توی خروجی اچ تی ام ال دنبال چنین خطی بگرده:

Found: md5("zaka") = 00a3b206c4ad2cae515e28745423093a

و zaka رو یک جایی ذخیره کنه. کافیه این کار رو برای همه هش‌هایی که هنوز کشف نشدن ادامه بدیم. مشخصه که هنوز یکسری کشف نشده خواهند موند ولی بذارین ببینیم به چی می رسیم. این مرحله به خاطر فرستادن درخواست به اینترنت کندتر است و یک راه حل خوبه اینه که فایل hard.txt و برنامه رو روی یک سرور وی پی اس آپلود کنیم و اونجا اجراش کنیم. همین کار رو می کنم و برنامه پایتون رو هم اینجوری می‌نویسم که یکی یکی هش ها رو برداره، به اون سایت بفرسته و توی خروجی اچ تی ام ال که بر می گرده، خطی که پسورد رو نشون می ده رو جدا کنه. اگر این هش اونجا هم نبود می نویسیم too difficult و از خیرش می گذریم (: بریم ببینیم چی می شه:

#!/usr/bin/python

import urllib
import csv
import re

spamReader = csv.reader(open('hard.txt', 'rb'), delimiter=' ', quotechar='|')
for row in spamReader:
    try:
        # This is here for copy/pasters....
        # Originally by Jadi at jadi.net
        params = urllib.urlencode({'term':row[0], 'crackbtn': 'Crack that hash baby!'})
        f = urllib.urlopen("http://md5crack.com/crackmd5.php", params)
        page = f.read()
        password = re.search('Found: md5\("(.*)"\) = %s' % row[0], page)
        print row[0], password.group(1)
    except: 
        print "too difficult"

و برای اجرا می‌زنیم:

user@remotehost:/tmp$nohup python onlinebreak.py > easy.txt & 

که خروجی پسوردهای شکسته شده رو بریزه توی easy.txt و حتی اگر من هم قطع شدم کار رو در پشت زمینه ادامه بده. تقریبا بعد از یازده دقیقه کار، همه پسوردها با این بانک اطلاعاتی هم چک می‌شن. بعد از اضافه کردن این‌ها به موارد شکسته شده قبلی توی دیتابیس خودمون، یک نگاه می‌ندازیم ببینیم چند تا از پسوردها هنوز باقی موندن.

jadi@jubun:~/w$ time python break.py > out.txt &&  grep later out.txt | wc -l 

real    0m58.863s
user    0m27.706s
sys 0m5.756s
1558

عالی (: حالا دیگه فقط ۱۵۵۸ نفر داریم که پسوردشون کشف نشده. از سیصد هزار نفری که اول داشتیم، پیشرفت عالیی است (: این هزار و پونصد نفر که پسوردهای غیرمعمول گذاشتن هم می‌تونن زنگ بزنن به پشتیبانی و بگن از امروز پسوردشون کار نمی کنه و اونها براشون ریست می کنن (:

نتیجه: از سیصد و خورده‌ای هزار نفر، فقط ۱۵۵۸ نفر پسوردهایی دارن که جزو پسوردهای استانداردی که هر هکری چک می کنه نیست. در پسوردهاتون عدد و حروف کوچیک و بزرگ بذارین و پسوردتون از هشت حرف هم بیشتر باشه. اصلا بذارن این یک دستور دیگه هم بدیم: فایل خروجی رو نشون بده، ستون سومش (پسورد) رو جدا کن (ستون‌ها رو اسپیس از هم جدا می کنه) بعد خروجی رو مرتب کن (پسوردها مرتب می شن) بعد بشمر هر پسوردی چند بار تکرار شده و خروجی و مرتب کن به شکل عددی معکوس و اسپیس های اول خط رو هم بیخیال شو و بعد ده خط اول رو نشون بده.

jadi@jubun:~/w$ cut out.txt -f3 -d' ' | sort | uniq -c | sort -b -n -r | head
 192019 1234
  11780 2222
  10532 123
   9734 1111
   7547 5555
   5293 12345
   4512 4444
   4473 0000
   2568 3333
   2192 444

و این شما و این پر استفاده‌ترین پسوردهای این سیصد هزار نفر. جالبه که ۶۰٪ از کاربران پسوردشون رو گذاشتن ۱۲۳۴۵. فوق العاده نیست؟

بدترین پسورد های ۲۰۱۱

شرکت اسپلش دیتا که کارش نوشتن ابزارهای مدیریت پسورد و کلمه عبور است فهرست ۲۵ بدترین کلمه عبور امسالش رو منتشر کرده. این فهرست از لیست‌هایی درست شده که در طول امسال هکرها منتشرشون کردن. فهرست مثل همیشه است. هر سال همین داستانه:

 1.  password 
 2.  123456 
 3.  12345678 
 4.  qwerty 
 5.  abc123 
 6.  monkey 
 7.  1234567 
 8.  letmein 
 9.  trustno1 
10.  dragon 
11.  baseball 
12.  111111 
13.  iloveyou 
14.  master 
15.  sunshine 
16.  ashley 
17.  bailey 
18.  passw0rd 
19.  shadow 
20.  123123 
21.  654321 
22.  superman 
23.  qazwsx 
24.  michael 
25.  football 

قهرمان‌ باگ‌های امنیتی ویندوز: اجرای کد ریموت با TCP/IP

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

باگ جدیدی که مایکروسافت فیکسش کرده:

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

این به روز رسانی کریتیکال روی ویندوزهای ویستا، سرور ۲۰۰۸، ویندوز ۷ و ویندوز سرور ۲۰۰۸ ارائه شده است.

جدی؟ روی پورت بسته یک رشته خاص پاکت یو دی پی بفرستیم در نهایت می تونیم یک کد رو روی سیستم اجرا کنیم؟ ((: شوخی می کنین!

نگاهی به مراکز شنود برادر سابق، کلنل قذافی

این یک سالن شنود است که در تریپولی لیبی کشف شده. پر از پوسترها و راهنماهای انگلیسی که تکنیک‌های شنود را آموزش می‌دهند. تمام عکس‌ها از ادو بایر است؛ خبرنگار عکاس وال استریت ژورنال.

ظاهرا ماموران در چنین سالن‌های بازی می‌نشسته‌اند. این یک ساختمان شش طبقه است. احتمالا در همین‌جا جاسوس‌های قذافی با تکنولوژی وارد شده از غرب، ایمیل‌ها و چت‌های افراد را شنود می‌کردند.

سالن شنود فقط یک طبقه از ساختمان را اشغال می‌کرده. پایینتر، اتاق‌هایی شبیه اتاق‌های بازجویی به چشم می‌خورد که در شبکه‌های پیچ در پیچ ساخته شده‌اند.

یکی از انقلابی‌ها در آستانه در یکی از اتاق‌های کار.

اتاقی در ساختمان شنود. این عکس در روز دوشنبه هفته قبل انداخته شده.

همه جا پر از پرونده‌های کاغذی است

و فلاپی دیسک‌ها زمین اتاق‌های شنود را پر کرده‌اند. تکنولوژی‌ها قدیمی هستند.

پرونده‌ها جدیدتر به شکل مرتب در قفسه‌ها چیده شده اند. پر از پرینت ایمیل‌های ماه‌های قبل و مربوط به روزهای آغازین شورش لیبی.

نمایشگرهای کامپیوتری و فایل‌های کاغذی روی هم انبار شده‌اند. در همین ساختمان قذافی سعی می‌کرد تمام مخالفان حکومتش را زیر نظر بگیرد.

نقشه پایتخت لیبی؛ طرابلس با نشانه‌هایی روی آن که نقاط خیزش مردم را نشان می‌دهد.

پرونده‌های اشخاص

جعبه‌هایی پر از فیلم‌های ویدئویی.

پرونده‌های قدیمی که در گوشه‌ای انبار شده‌اند

پرونده‌های خرد شده با دستگاه کاغذ خرد کن

و فکر می کنین اگر لیبی همه این هزینه‌ها رو صرف مثلا آموزش در مدارس می‌کرد، وضعش امروز فرقی داشت یا نه؟ البته می پذیرم که اگر به جای شکنجه و کشتار و پرونده سازی سراغ آموزش بچه ها و دانشگاه هاش می‌رفت، مدت‌ها قبل حاکم مادام العمرش باید کنار می‌کشید و خب ظاهرا برادرمون ترجیح می داد دیکتاتور یک کشور بدتر باشه تا شهروند عادی یک کشور بهتر..

جلوگیری از ورود تفنگ ده سانتی متری به هواپیما

امنیت فرودگاه‌ها این روزها واقعا مایه خنده همه شده.. و البته مایه دردسر. همین چند روز قبل کن لیولد و همسرش که از مسافرت انگلیس برمی‌گشتند یک عروسک کوچک سرباز خریدند تا با خودشان به کانادا برگردانند اما مامورین امنیتی هواپیما با استفاده از دستگاه اشعه ایکس متوجه حضور یک اسلحه در وسایل آن‌ها شدند و در عین تعجب حضار، تصمیم گرفتند که این اسلحه اجازه ورود به هواپیما ندارد تا یک بار دیگر همه ببینند که وضع قوانین محدود کننده عام، گاهی چقدر خنده‌دار می‌شود.

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