امنیت در همهٔ مراحل تولید، نه فقط در تست

الگوی رایج این است: پروژه هشت ماه ساخته میشود، دو هفته مانده به راهاندازی یک تست نفوذ سفارش داده میشود، گزارشی با نوزده یافته برمیگردد، و تیم دو هفته وقت دارد چیزی را درست کند که بعضی از یافتههایش تصمیم معماری است، نه باگ.
آن یافتهها درست نمیشوند. یا با «ریسک پذیرفته شد» بسته میشوند یا با وصلهای که ماهها بعد از جای دیگری بیرون میزند.
مسئله بیکفایتی تیم امنیت نیست. مسئله زمانبندی است: امنیت را در آخرین مرحله گذاشتهایم، و آخرین مرحله جایی است که تغییر گرانترین قیمت را دارد.
قاعدهای که همهچیز از آن میآید
هزینهٔ رفع یک مسئلهٔ امنیتی با فاصله از لحظهٔ ایجادش رشد میکند، و رشدش خطی نیست.
مدل دسترسی غلط، وقتی روی وایتبرد است، یک ساعت بحث است. وقتی در کد است، دو هفته کار است. وقتی در تولید است با دادهای که سه ماه بر اساسش نوشته شده، یک پروژه است.
پس سؤال درست این نیست که «کِی تست امنیت بگیریم». این است که در هر مرحله چه کار امنیتی هست که فقط همانجا ارزان است.
کشف: طبقهبندی داده
پیش از هر چیز، یک جدول ساده: این سامانه چه دادهای نگه میدارد، و اگر آن داده بیرون برود چه اتفاقی میافتد؟
سه سطح کافی است — عمومی، داخلی، حساس. دادههای حساس در ایران معمولاً یکی از اینهاست: کد ملی، اطلاعات پرداخت، سوابق درمانی، دادههای موقعیت مکانی، و قیمتهای قراردادی مشتریان B2B.
این جدول کوچک، تصمیمهای چهار مرحلهٔ بعدی را تعیین میکند. سامانهای که پروندهٔ درمانی نگه میدارد با سامانهای که کاتالوگ محصول نشان میدهد، دو سطح متفاوت از سختگیری لازم دارد — و خرج کردن سطح اول روی دومی هم اشتباه است.
معماری: مرز اعتماد و مدل دسترسی
اینجا سه تصمیم گرفته میشود که بعداً تقریباً غیرقابل تغییرند:
مرز اعتماد کجاست؟ چه چیزی داخل است و چه چیزی بیرون. هر ورودیای که از بیرون این مرز میآید — از جمله فراخوانی سرویس شریک تجاری و پاسخ درگاه پرداخت — اعتبارسنجی میشود.
مدل دسترسی چیست؟ نقشمحور، مالکیتمحور، یا ترکیبی. این را در سطوح دسترسی کامل نوشتهایم. نکتهٔ مرحلهایاش این است: اگر مدل دسترسی در معماری تعریف نشود، هر توسعهدهنده در هر کنترلر نسخهٔ خودش را مینویسد و شما سامانهای دارید با بیست مدل دسترسی متفاوت.
راز کجا نگهداری میشود؟ پاسخ «در فایل پیکربندی، در مخزن» است تا وقتی کسی تصمیم دیگری نگرفته باشد. مدیریت رازها باید پیش از اولین commit تصمیمگیری شود، چون بعد از آن پاک کردن راز از تاریخچهٔ مخزن کار دیگری است.
خروجی مکتوب این مرحله: مدل تهدید. یک صفحه، نه یک سند صد صفحهای.
ساخت: چیزهایی که ابزار بهتر از آدم میگیرد
سه لایه، به ترتیب بازده:
۱. تحلیل ایستا در خط لوله. ابزاری که الگوهای خطرناک را در کد پیدا میکند — پرسوجوی ساختهشده با الحاق رشته، رمزنگاری با تنظیمات ضعیف، ورودی بدون اعتبارسنجی. ارزان است، در هر commit اجرا میشود، و درصد قابلتوجهی از خطاهای تکرارشونده را میگیرد.
۲. اسکن وابستگیها. بیشتر کدی که منتشر میکنید را خودتان ننوشتهاید. امنیت زنجیرهٔ تأمین موضوع جداگانهای است و مهمتر از آن چیزی است که معمولاً فرض میشود.
۳. بازبینی انسانی، اما فقط جایی که ارزش دارد. چشم آدم برای منطق دسترسی و جریان پول به کار میآید، نه برای پیدا کردن الگویی که ابزار مطمئنتر میگیرد. تفکیک این دو در فرهنگ بازبینی کد آمده.
نکتهای که با فراگیر شدن دستیارهای کدنویسی تازه شده: کد تولیدشده با هوش مصنوعی همان اشتباهات را با اطمینان بیشتری تکرار میکند — ریسکهایش جداگانه بررسی شده.
راستیآزمایی: تست، ولی نه فقط تست نفوذ
تست نفوذ بیرونی ارزش دارد، ولی بهعنوان تأیید، نه بهعنوان کشف. چیزی که پیش از آن باید انجام شده باشد:
- تست دسترسی برای هر نقش. «آیا کاربر الف میتواند رکورد کاربر ب را ببیند؟» این را برای هر نقش و هر منبع بنویسید. ارزانترین تست امنیتی و پرکاربردترینش.
- تست ورودیهای مرزی و بدشکل روی هر نقطهٔ ورودی عمومی.
- بررسی اینکه لاگها داده حساس ثبت نمیکنند. این یکی مکرراً از قلم میافتد و در ممیزی گران تمام میشود.
بهرهبرداری: امنیت چیزی نیست که تمام شود
سامانهای که روز راهاندازی امن بود، شش ماه بعد لزوماً امن نیست — نه چون کدش عوض شده، بلکه چون آسیبپذیری تازهای در چیزی که استفاده میکند کشف شده.
سه رویه که در عمل کافیاند:
بهروزرسانی برنامهریزیشدهٔ وابستگیها. نه وقتی خبر بد آمد؛ بهصورت دورهای، تا وقتی خبر بد آمد رفتن به نسخهٔ جدید یک کار روزانه باشد نه یک بحران.
دفتر ثبت یافتههای امنیتی. هر یافته در لحظهٔ کشف ثبت میشود، نه در لحظهٔ رفع؛ و ریسکی که پذیرفته شده، تاریخ و دلیل دارد.
تمرین بازیابی. پشتیبانی که هیچوقت بازگردانی نشده، پشتیبان نیست. این را در دفترچههای اجرا نوشتهایم.
و آنچه نباید بشود
مقاومت واقعی در برابر «امنیت از ابتدا» از یک ترس درست میآید: اینکه تبدیل شود به فرم و امضا و کمیته، و تحویل را کند کند.
آن ترس بجاست. تفکیک عملی این است:
آنچه ارزش دارد: جدول طبقهبندی داده (یک صفحه)، مدل تهدید (یک صفحه)، اسکن خودکار در خط لوله (یکبار راهاندازی)، تست دسترسی بهازای نقش، دفتر یافتهها.
آنچه معمولاً ارزش ندارد: سند سیاست امنیتی سی صفحهای که کسی نمیخواند، جلسهٔ تأیید امنیتی برای هر تغییر، و ابزار گرانی که هشدارهایش را کسی نگاه نمیکند.
معیار ساده است: رویهای که خروجی مکتوب یک صفحهای دارد و در یک جلسه تمام میشود، میماند. رویهای که جلسهٔ دورهای میخواهد، سه ماه بعد اجرا نمیشود.