وقتی مردم کلمه «audit» (حسابرسی/بازرسی) را میشنوند، معمولاً حسابداران، صفحات گسترده و فصل مالیات را در ذهن خود مجسم میکنند. در نرمافزار، حسابرسی یک حوزه کاملاً متفاوت است. موضوع کمتر به تراز کردن دفاتر و بیشتر به پرسیدن سوالات سخت از کد، دادهها و کنترلهای شما مربوط میشود. یک حسابرسی سیستم (systems audit) ارزیابی میکند که آیا داراییهای اطلاعاتی شما ایمن هستند، دادههایتان دقیق باقی میمانند و منابع شما واقعاً همانطور که فکر میکنید عمل میکنند یا خیر.
یک سیستمِ «کارآمد» لزوماً یک سیستم «قابل اعتماد» نیست. یک پلتفرم سوابق تحصیلی ممکن است دانشجویان را بهدرستی ثبتنام کند و ریز نمرات تمیزی تولید کند، در حالی که رمزهای عبور را بیسروصدا به صورت متن ساده (plain text) ذخیره میکند. یک داشبورد لجستیک ممکن است زمانهای تحویل بینقصی را نشان دهد، در حالی که اعتبارنامههای پایگاه داده خود را در کد منبعی که بهصورت عمومی قابل خواندن است، فاش میکند. حسابرسی سیستمها برای پر کردن این شکاف وجود دارد.
آنچه یک حسابرسی سیستم واقعاً پوشش میدهد
در هسته اصلی خود، یک حسابرسی سیستم به سه مورد میپردازد: محرمانگی (confidentiality)، یکپارچگی (integrity) و کارایی (efficiency). محرمانگی یعنی سوابق دانشجویی، گزارشهای تراکنش یا پروندههای بیماران شما فقط برای افراد مجاز قابل دسترسی باشد. یکپارچگی یعنی دادهها بهصورت بیسروصدا فاسد نشوند، تاریخچه خود را از دست ندهند یا در طول زمان از واقعیت منحرف نشوند. کارایی یعنی سرورها، سرویسها و فرآیندهای شما به جای اینکه فقط در زمانی که کسی تماشا نمیکند منابع را مصرف کنند، ارزشآفرین باشند.
این سه ویژگی باید قابل اثبات باشند. اعتماد به پایگاه داده صرفاً به این دلیل که هنوز از کار نیفتاده است، به معنای تأیید نیست. یک حسابرسی واقعی شواهدی تولید میکند که وقتی یک نهاد ناظر، یک مشتری یا حتی خودِ آیندهی شما میپرسد که از کجا میدانید سیستم سالم است، بتوانید به آنها استناد کنید.
انواع اصلی حسابرسیهای سیستم
هر حسابرسی به یک موضوع واحد نمیپردازد. بسته به ریسکهایی که با آنها روبرو هستید، ممکن است به یک یا چند مورد از موارد زیر نیاز داشته باشید:
حسابرسی اپلیکیشن (Application Audit). این نوع حسابرسی بررسی میکند که آیا منطق نرمافزار درست است یا خیر. آیا محاسبات دقیق هستند؟ آیا ماشینهای حالت (state machines) موارد خاص (edge cases) را مدیریت میکنند؟ آیا مجوزدهی (authorization) در هر تابعی که با دادههای حساس در تماس است، اعمال میشود؟ یک شکست کلاسیک در سطح اپلیکیشن، ماژول نمرهدهی است که اعداد اعشاری را بهاشتباه گرد میکند، یا بررسی واجد شرایط بودن برای بورسیه که با تغییر دادن یک مقدار در منوی کشویی (dropdown) قابل دور زدن است.
حسابرسی امنیتی (Security Audit). تمرکز این حسابرسی بر کنترلهای دسترسی، رمزنگاری و آسیبپذیریها است. این حسابرسی میپرسد چه کسی میتواند کدام سوابق را بخواند، آیا دادهها در حین انتقال و در حالت ذخیرهشده رمزنگاری شدهاند، و آیا مدیریت نشست (session management) شما میتواند در برابر دستکاری مقاومت کند یا خیر. همچنین بررسی میکند که آیا وابستگیهای (dependencies) شما دارای آسیبپذیریهای شناختهشدهای هستند که بهطور بیسروصدا شما را در معرض سوءاستفاده قرار میدهند یا خیر.
حسابرسی پایگاه داده (Database Audit). یکپارچگی دادهها در اینجا نهفته است. آیا محدودیتهای ارجاعی (referential constraints) اعمال شدهاند؟ آیا نسخههای پشتیبان واقعاً قابل بازیابی هستند یا فقط آنها را زمانبندی کردهاید؟ آیا سیاستهای نگهداری داده با الزامات قانونی مطابقت دارد؟ یک حسابرسی پایگاه داده همچنین طرحهای بازیابی را بررسی میکند، زیرا نسخهی پشتیبانی که هرگز تمرین بازیابی آن را نکردهاید، فقط یک تئوری است.
حسابرسی شبکه (Network Audit). این حسابرسی سرورها، دیوارههای آتش (firewalls)، مسیریابی و در دسترس بودن را بازرسی میکند. تأیید میکند که فقط پورتهای ضروری باز هستند، قوانین دیواره آتش مستند شدهاند و زیرساخت شما میتواند جهشهای ترافیکی یا حملات محرومسازی از سرویس (DoS) را مدیریت کند. همچنین بررسی میکند که آیا سیستمعاملها وصله (patch) شدهاند یا خیر، و نه فقط لایه اپلیکیشن.
حسابرسی انطباق (Compliance Audit). این حسابرسی سیستم را با قوانین خارجی میسنجد. پلتفرمهای دانشجویی ممکن است نیاز به رعایت FERPA داشته باشند. سیستمهای مراقبتهای بهداشتی باید استانداردهای HIPAA را برآورده کنند. پردازش پرداخت نیز نیازمند همسویی با PCI-DSS است. انطباق فقط به معنای امن بودن نیست؛ بلکه به معنای توانایی اثبات آن امنیت به یک مرجع خارجی است.
حسابرسی عملیاتی (Operational Audit). کد تنها نیمی از داستان است. این حسابرسی فرآیندهای نگهداری، گردش کارهای پشتیبانی، مدیریت تغییر و بهروز بودن مستندات را بررسی میکند. یک اپلیکیشن درخشان زمانی به یک ریسک تبدیل میشود که تنها فردی که خط لوله استقرار (deployment pipeline) آن را درک میکند، سازمان را ترک کند.
یک بررسی واقعی: حسابرسی EduManage v1.0
من اخیراً یک حسابرسی امنیتی و اپلیکیشن داخلی روی EduManage v1.0، یک پلتفرم مدیریت آموزشی، انجام دادم. این سیستم مسئولیت ثبتنام، سوابق و نمرهدهی را بر عهده داشت. قبل از اینکه سیستم با دادههای واقعی دانشجویان در تماس باشد، باید میدانستیم که آیا میتوان به آن اعتماد کرد یا خیر. من از یک فرآیند ساده ششمرحلهای پیروی کردم و همین ساختار را برای اکثر حسابرسیهای داخلی توصیه میکنم.
تعیین محدوده پروژه. ممیزیهای بدون مرز به کارهای طاقتفرسای بیپایان تبدیل میشوند. ما دقیقاً مشخص کردیم که کدام ماژولها در محدوده هستند: احراز هویت، مدیریت سوابق و جریانهای کاری اصلی ثبتنام. ادغام با سرویسهای شخص ثالث و زیرساختهای فیزیکی صراحتاً خارج از محدوده بودند. ما دو هفته زمان اختصاص دادیم و افراد کلیدی را که میتوانستند به سوالات پاسخ دهند، شناسایی کردیم. این شفافیت از گسترش بیرویه محدوده (scope creep) جلوگیری کرده و همه را همسو نگه میدارد.
جمعآوری اطلاعات و مستندات. من نمودارهای معماری، مستندات API، طرحوارههای پایگاه داده و گزارشهای حوادث قبلی را جمعآوری کردم. با توسعهدهنده ارشد درباره روشهای استقرار و انتخابهای پشته تکنولوژی (tech stack) صحبت کردم. شما نمیتوانید چیزی را که درک نمیکنید تست کنید، و فرضیاتی که در این مرحله ساخته میشوند، تمام یافتههای بعدی را مخدوش خواهند کرد.
اجرای تستها. ما از سه زاویه به سیستم نگاه کردیم. بازبینی کد (code review) به دنبال الگوهای ضد (anti-patterns)، نقصهای تزریق (injection flaws) و وابستگیهای ناامن بود. تستهای عملکردی (Functional tests) تأیید کردند که قوانین کسبوکار — مانند سقف ظرفیت ثبتنام و بررسی پیشنیازها — واقعاً از حالتهای نامعتبر جلوگیری میکنند، نه اینکه فقط آنها را پشت کدهای فرانتاند پنهان کنند. تستهای نفوذ (Penetration tests) از یک مهاجم خارجی تقلید کردند؛ با بررسی نقاط انتهایی (endpoints) در دسترس و دستکاری درخواستها، بررسی کردند که چه چیزی نشت میکند یا از کار میافتد.
تحلیل ریسکها و یافتهها. آسیبپذیریهای خام اهمیت یکسانی ندارند. ما هر یافته را بر اساس احتمال وقوع و
