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

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

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

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

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

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

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

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

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

نکته امنیتی: به فرستنده ایمیل اعتماد نکنید

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

یک ایمیل است ظاهرا از طرف من برای یکسری از دوستان که می گه یک فایل اجرایی رو از سرور یک دانشگاه توی کانادا (که احتمالا ادمین از دسترسی هاش برای این آماتور بازی ها سوء استفاده می کنه) دانلود کنند و اجرا.

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

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

آپدیت ۳ زانویه: اگر دوست دارین یک کرکر ببینین، کامنت ها رو هم بخونین (:

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

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

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

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

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

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

هکرهای سیل تایلند

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

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

هک صفحه رسمی اکثر شهرهای سوریه به دست ناشناس

عالیه و پر هیجان. گروه انانیموس یا ناشناس، صفحه رسمی اکثر شهرهای سوریه رو هک کرده و نقشه تعاملی ای از کشته های شهرها رو به جاشون گذاشته. راضیم ازت انانیموس (: دوستان طرفدار قدرت سیاسی حاکم، شما هم به نظرم کم کم وا بدین این بشار رو (:

http://tartous-city.gov.sy/

http://deirezzor-city.gov.sy/

http://palmyra-city.gov.sy/

http://homs-city.gov.sy/

http://aleppo-city.gov.sy/

http://latakia-city.gov.sy/

http://old-damascus.gov.sy/

نقص امنیتی فروشگاه: هر کسی می‌تواند خودروی دیگران را زیر نظر بگیرد

دلخوشی‌ها

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

برای اینکار کافی است اپ مورد نظر را نصب کنید، وارد آن بشوید و با دادن شماره ماشین، دقیقا ببینید که کجا پارک شده و با دوربین به خودرویتان نگاه کنید. یک ایده جذاب و جالب برای احساس امنیت.

این سیستم با استفاده از چنین دوربین‌هایی ممکن شده:

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

دل نگرانگی‌ها

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

و کمی کار بیشتر نشان می‌دهد که کلا یک درخواست JSON به آن آدرس فرستاده می‌شود و اطلاعات برمی‌گردد. مثلا چنین درخواستی می‌تواند نشان بدهد که وضعیت خودرو با پلاک abc123 چیست:

http://120.151.59.193/v2/bays.json?visit.plate.text=abc123~0.3&is_occupied=true&limit=4&order=-similarity

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

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

در این مورد هم فروشگاه و هم سازنده دستگاه اقدامات لازم برای جلوگیری از این شنود ناخواسته افراد بر همدیگر را انجام دادند ولی فکر می‌کنید چند تا از دوربین‌هایی که دور و بر ما هستند، چنین مشکلاتی دارند؟

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

چرا گنو/لینوکس رو دوست دارم: بررسی تغییرات اخیر فایلها برای یک کلمه خاص

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

دوستم یک مشکل داره! سایتش هک می شه و اون می خواد از طریق یک روش عجیب جلوش رو بگیره! به عبارت دیگه، وضعیت دوستم اینه که سروری داره که مشکوکه به تغییرات گاه گداری یکسری فایل توش – یک جور هک. می گه چند ساعتی هست که داره سعی می کنه برنامه ای بنویسه که «تمام فایل های یک شاخه خاص و شاخه‌های درون اون رو چک کنه و اگر توی فایل‌هایی که در ده دقیقه گذشته عوض شده‌اند، مثلا عبارت hacked بود، اسم فایل رو بنویسه.»

گنو/لینوکس یک ابزار عالی است با کلی خرت و پرت که می شه بهم جوششون داد. ما اول چی می‌خوایم ؟ پیدا کردن تمام فایل‌هایی که در ده دقیقه گذشته عوض شده‌اند. می‌دونم که دستور find مال این تیپ کارها است و راهنمای هر دستوری هم توی man پیدا می‌شه. پس می‌زنم man find و توش می‌بینم که:

-mmin n
              File's data was last modified n minutes ago

خلاص! پس فایند یک سوییچ داره که کل فایل‌هایی که در n دقیقه قبل عوض شدن رو نشون می‌ده. کافیه بزنم:

bash-4.1$ find /home -nmin -10
.
./gedit.jadi.2767816239
./plugtmp
./orbit-jadi
./orbit-jadi/linc-5b12-0-2c85f1f5cb706
./orbit-jadi/linc-60d9-0-436786093cc42
./orbit-jadi/linc-5ff8-0-6af67eaaaf2db
./orbit-jadi/linc-58be-0-373ce140b83c4
./1.txt

من که کیف می‌کنم (: حالا فهرستی دارم از تمام فایل‌هایی که در ده دقیقه قبل تغییر کردن. حالا کافیه روشون جستجو کنیم. می دونم که توی find یک سوییچ هم داریم به اسم exec که جلوش هر دستوری بزنیم روی خروجی ها اجرا می شه. برای گفتن به exec که دستورات تموم شده باید یک ;\ بذاریم و جلوی exec هم اگر {} بذاریم یعنی اسم فایلی که پیدا کرده رو اینجا بنویسه. راستی!‌ اینها رو من بار بار اول و دوم و سوم و چهارم و پنجم و ششم توی man find نگاه کردم ولی الان دیگه حفظ شدم. بذارین تست کنیم:

bash-4.1$ sudo find /home -mmin -10 -exec echo \{\} \;
.
./gedit.jadi.2767816239
./plugtmp
./orbit-jadi
./orbit-jadi/linc-5b12-0-2c85f1f5cb706
./orbit-jadi/linc-60d9-0-436786093cc42
./orbit-jadi/linc-5ff8-0-6af67eaaaf2db
./orbit-jadi/linc-58be-0-373ce140b83c4
./1.txt

درسته پس. الان قسمت اول فایند، فایل های تغییر کرده در ده دقیقه رو پیدا می کنه و قسمت exec اسم اون فایل رو جلوی یک echo می ذاره که دستور را چاپ می کنه. پس می رم قدم بعدی که grep کردن است. grep توی یک فایل دنبال یک عبارت می گرده و اگر بود، اون قسمت رو می نویسه. من یک سوییچ H هم اضافه می کنم تا اسم فایل رو هم بنویسه. پس در کل دارم:

bash-4.1$ sudo find /home -mmin -10 -exec grep hacked {} \;
grep: ./gedit.jadi.2767816239: No such device or address
grep: ./orbit-jadi/linc-5b12-0-2c85f1f5cb706: No such device or address
grep: ./orbit-jadi/linc-60d9-0-436786093cc42: No such device or address
grep: ./orbit-jadi/linc-5ff8-0-6af67eaaaf2db: No such device or address
grep: ./orbit-jadi/linc-58be-0-373ce140b83c4: No such device or address
this hacked my

اوه! اولا H رو یادم رفت بذارم و در نتیجه اسم فایلها چاپ نشدن و دوم اینکه یکسری error هم دارم. در لینوکس بعضی خروجی ها ارور هستن که با اینکه ما هر دو رو یکجا می بینیم اما ماهیتشون با خروجی برنامه فرق داره. این ارورها مال این هستن که در این حالت خاص من در اینجا روی فایل‌هایی گرپ کردم که فایل‌های معمولی نیستن و محتویات قابل خوندن ندارن.

چیکار کنیم؟ اضافه کردن H که آسونه! برای ارور هم ما یک «دستگاه» جذاب توی لینوکس داریم به عنوان null که مثل بقیه ابزارها توی دایرکتوری dev است و هر چیزی روش نوشته بشه می ره به ناکجا آباد و غیب می شه پس کافیه من خروجی ارور رو به جای خروجی معمولی که روی صفحه است، بریزم روی این دستگاه تا از شرش راحت بشم! خروجی ارور رو با این عبارت می شه کنترل کرد <2 پس در نهایت خواهم داشت:

bash-4.1$ sudo find /home -mmin -10 -exec grep -H hacked {} 2> /dev/null \;
./1.txt:this hacked my

عالی! (: نتیجه دلخواه دوستم کاملا آزاد و شاد همین دستوره:

توی دایرکتوری home بگرد. فایل هایی که در طول ده دقیقه قبل تغییر کردن رو نشون بده. بعد خط به خط اسم اون فایل رو بذار جلوی دستور گرپ که دنبال عبارت hacked می گرده. راستی! به خاطر سوییچ اچ، اسم فایل رو نشون بده و خروجی ارور استاندارد رو هم بریز توی نول که می ره به ناکجا آباد.

سورس کسپراسکای کسپرسکی ۲۰۰۹ روی اینترنت

هاهاهووهه… ظاهرا سورس برنامه کسپراسکای کسپرسکی ۲۰۰۹ به اینترنت راه پیدا کرده. دارک کودر از سایت آن‌ریموت می‌گه که به کد نگاهی کرده و کد به نظر معتبر می‌رسه. برای کمپایلش ویژوال استودیو سی پلاس پلاس ۲۰۰۸ بهترین گزینه است.

کل سورس تقریبا ۱ گیگابایت است و بدون شک نگاه کردن بهش برای خیلی‌ها جالب. سورس زیپ شده تقریبا ۳۰۰ مگ. سورس کسپراسکای کسپرسکی رو دانلود کنین و خوش بگذرونین.

توضیح: لینک به سورس رو برداشته ام چون اون لینک دیگه کار نمی کرد. اگر کسی واقعا علاقمنده، خودش می تونه لینک رو پیدا کنه