امنیت و هک اخلاقی

نشت اطلاعات چیست

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

  • درس ۸ از ۱۲
  • مقدماتی
  • رایگان، بدون ثبت نام

خبر نشت یک روز است، اثرش سال ها

روزی که اعلام می شود

تیتر، تعداد حساب ها، عذرخواهی شرکت. همین جا تمام می شود.

خط آب: از اینجا به بعد هیچ کدام خبر نمی شوند
  • همان جفت روی هر سرویس دیگری امتحان می شود

    خودکار، و بدون اینکه چیزی حدس زده شود.

  • هش ها با سخت افزار جدیدتر دوباره شکسته می شوند

    رمزی که ده سال پیش گران بود، امروز نیست.

  • داده با نشت های دیگر ترکیب می شود

    ایمیل از یکی، شماره از دیگری، آدرس از سومی: یک پرونده.

  • همان پرونده به پیام کلاهبرداری هدفمند تبدیل می شود

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

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

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

از یک نشت دقیقا چه چیزی بیرون می آید

تصور رایج این است که در یک نشت اطلاعات رمزها لخت و خوانا بیرون می ریزند. معمولا این طور نیست، و واقعیتش هم آرامش بخش نیست.

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

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

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

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

چرا رمزی که سه سال پیش لو رفت هنوز خطرناک است

یک نشت وقتی منتشر می شود دیگر تمام نمی شود. تازه شروع می شود، و آنچه بعدش می آید هیچ وقت خبر نمی سازد.

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

دومین چیز کندتر است و به همان اندازه واقعی: هش ها با گذشت زمان دوباره شکسته می شوند. سخت افزار هر سال ارزان تر و سریع تر می شود، پس رمزی که در سال ۲۰۱۵ شکستنش گران بود، امروز نیست. یعنی داده یک نشت قدیمی به مرور ارزشمندتر می شود، نه کم ارزش تر.

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

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

چطور بفهمیم رمز ما لو رفته، بدون اینکه رمز را جایی بفرستیم

سرویسی هست به نام Have I Been Pwned که مجموعه ای از داده های نشت شده را جمع کرده و اجازه می دهد بپرسید ایمیل یا رمز شما در آنها هست یا نه. اولین واکنش هر آدم عاقلی به بخش دومش این است که تایپ کردن رمز در یک سایت برای اینکه بفهمی لو رفته یا نه، دیوانگی است. کاملا درست است، و کاری که انجام می شود این نیست.

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

در ۷ سپتامبر ۲۰۲۶ همین را اجرا کردیم. برای یکی از پرتکرارترین رمزهای دنیا، سرویس ۱۹۷۸ سطر برگرداند. یعنی حتی کسی که آن درخواست را ببیند، فقط می داند رمز مورد نظر یکی از آن ۱۹۷۸ تاست و نمی داند کدام؛ خود رمز هیچ وقت از دستگاه بیرون نرفت.

و جوابی که برای همان رمز برگشت، عددی است که ارزش نگاه کردن دارد. رشته «password» در مجموعه رمزهای لو رفته ۵۲٬۳۷۲٬۴۲۷ بار دیده شده. رشته «123456» ۲۱۰٬۴۶۱٬۲۰۸ بار. اینها تعداد آدم ها نیست، تعداد دفعاتی است که آن رمز در نشت های جمع آوری شده ظاهر شده، و همین برای فهمیدن یک چیز کافی است: هر فهرست حدسی که یک مهاجم استفاده می کند با همین ها شروع می شود.

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

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

  1. ۱

    رمز روی دستگاه خودتان به یک هش تبدیل می شود

    تا اینجا هیچ چیزی از کامپیوتر شما بیرون نرفته.

  2. ۲

    فقط پنج حرف اول آن هش فرستاده می شود

    از پنج حرف، رمز ساخته نمی شود.

  3. ۳

    سرویس همه هش های لو رفته با آن پیشوند را برمی گرداند

    در آزمون ما ۱۹۷۸ سطر برگشت.

  4. ۴

    تطبیق روی دستگاه خودتان انجام می شود

    سرویس نمی داند کدام یک از آن سطرها مال شما بود.

این روش می گوید رمز در داده ای که این سرویس دارد هست یا نه. نبودنش یعنی در آن داده نیست، نه اینکه رمز خوبی است.

بعد از یک نشت چه کار کنیم، به همین ترتیب

واکنش اول بیشتر آدم ها عوض کردن رمز همان سرویسی است که نشت کرده. لازم است و کافی نیست، و مهم تر اینکه آسان ترین قدم است، پس معمولا تنها قدمی است که برداشته می شود.

ترتیبی که واقعا کار می کند چهار قدم دارد.

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

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

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

و یک کاری که نکنید، چون شایع است و بی فایده: عوض کردن رمز به نسخه ای از همان رمز. رمزی که آخرش یک عدد اضافه شده، در برابر همان فهرست همان جفت ها هیچ محافظتی نمی سازد؛ آن فهرست ها همین الگو را هم امتحان می کنند.

چهار قدم بعد از نشت، به همین ترتیب

  1. رمز همان سرویس را عوض کنید

    لازم است، و آسان ترین قدم است.

    ۱
  2. هر جای دیگری که همان رمز بوده

    کار اصلی همین قدم است و بیشترین وقت را می برد.

    ۲
  3. تایید دو مرحله ای، اول روی ایمیل

    دکمه فراموشی رمز هر سرویس دیگری به همان صندوق می رسد.

    ۳
  4. چند هفته حواستان به پیام های عجیب باشد

    پیامی که با اطلاعات درست شروع می شود و بعد چیزی می خواهد.

    ۴

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

چرا رمز یکتا یک فاجعه را به یک دردسر تبدیل می کند

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

تفاوت بین این دو حالت، تفاوت بین ده دقیقه و ده روز است، و هیچ ربطی به قوی بودن رمز ندارد. یک رمز بسیار قوی که در سه سرویس تکرار شده، وقتی یکی از آن سه تا نشت کند، از یک رمز ضعیف یکتا بدتر عمل می کند.

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

مرحله بعدی این بحث، ساختن رمزی است که ارزش یکتا بودن را داشته باشد و روشن کردن عامل دوم؛ هر دو در درس های دیگر مسیر امنیت آمده اند.

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

مسیر سریع با هوش مصنوعی

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

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

نسخه آماده کپی

بررسی یک رمز بدون فرستادن آن، روی لینوکس یا مک. رمز تایپ می شود اما روی صفحه دیده نمی شود و در پایان از حافظه پاک می شود:

  read -rs P; H=$(printf %s "$P" | sha1sum | cut -c1-40 | tr a-f A-F); curl -s "https://api.pwnedpasswords.com/range/${H:0:5}" | grep -i "^${H:5}"; unset P H

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

پرامپت، با فهرست نام سرویس ها چسبانده شده زیرش. رمزها را نمی فرستید:

  اینها نام سرویس هایی هستند که ایمیل من در نشت اطلاعاتشان بوده. مرتبشان کن
  بر اساس اینکه اگر کسی به آن حساب برسد چه چیز دیگری برایش باز می شود، و نه
  بر اساس اینکه نشت چقدر بزرگ بوده. برای هرکدام بنویس:
  الف) اگر همان رمز جای دیگری هم استفاده شده باشد، کدام حساب ها در خطرند
  ب) آیا این سرویس تایید دو مرحله ای دارد و از چه نوعی
  حساب ایمیل را همیشه اول فهرست بگذار، حتی اگر در فهرست نشت نباشد.
  سرویسی را که نمی شناسی «نامشخص» علامت بزن و از فهرست حذفش نکن.

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

هوش مصنوعی در این کار

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

ابزارهایی که واقعا کمک می کنند

  • Have I Been Pwned هوش مصنوعی نیست و عمدا اول فهرست است. داده واقعی اینجاست و هیچ مدلی نمی داند شما در کدام نشت بوده اید؛ اگر بگوید، ساخته است.
  • Claude برای مرتب کردن فهرست سرویس ها بر اساس اینکه هرکدام چه چیز دیگری را باز می کند؛ استدلالش را می نویسد و می توانید با آن مخالفت کنید. ایران در هیچ یک از دو فهرست کشورهای پشتیبانی شده انتروپیک نیست و پرداخت رسمی از ایران انجام نمی شود.
  • Gemini برای کار حجمی: خواندن توضیح چند نشت پشت سر هم و بیرون کشیدن اینکه هرکدام چه فیلدهایی داشته. صفحه خود گوگل می گوید اپ وب جمنای در بیش از دویست و سی کشور و منطقه کار می کند و ایران در آن فهرست نیست.
  • RGB لایه دسترسی و پرداخت برای ایران، جدا از خود ابزارها.

کجا نتیجه معکوس می دهد

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

منبع ها: Have I Been Pwned: Pwned Passwords Have I Been Pwned: API v3 documentation Google: Gemini Apps privacy Anthropic supported countries

حد این توصیه

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

از تجربه خود ما

روش پیشوندی که در این درس توضیح داده شد، در ۷ سپتامبر ۲۰۲۶ اجرا شد و عددهایش از همان اجرا نقل می شوند. برای رشته «password» پنج حرف اول هش فرستاده شد و سرویس ۱۹۷۸ سطر برگرداند؛ سطر مربوط به آن رمز می گفت ۵۲٬۳۷۲٬۴۲۷ بار در داده های لو رفته دیده شده. همین کار را با «123456» تکرار کردیم: ۱۹۲۱ سطر برگشت و عدد آن ۲۱۰٬۴۶۱٬۲۰۸ بود. دستور تک خطی که در بخش مسیر سریع آمده همان دستوری است که اجرا شد و همان خروجی را داد.
چیزی که در همین اجرا برایمان جالب بود، تعداد سطرها بود. ۱۹۷۸ عدد بزرگی نیست و آدم انتظار عدد بزرگ تری دارد، اما همین اندازه کافی است تا کسی که درخواست را می بیند نتواند بگوید کدام سطر مال شماست. یعنی حریم خصوصی این روش از رمزنگاری پیچیده نمی آید؛ از یک انتخاب ساده درباره طول پیشوند می آید. و درست به همین دلیل قابل بازتولید است: هرکسی می تواند همان یک خط را اجرا کند و همین را ببیند.

سوال هایی که واقعا پرسیده می شوند

ایمیلم در فهرست نشت بود اما هیچ اتفاقی نیفتاده؛ باید کاری بکنم؟

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

رمزم را در سایت بررسی نشت وارد کنم امن است؟

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

آیا باید ایمیلم را عوض کنم؟

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