মানুষ যখন "audit" শব্দটি শোনে, তখন তাদের চোখে সাধারণত হিসাবরক্ষক, স্প্রেডশিট এবং ট্যাক্স সিজন ভেসে ওঠে। সফটওয়্যারের ক্ষেত্রে, অডিটিং সম্পূর্ণ ভিন্ন একটি বিষয়। এটি লেজার বা খাতা মেলানোর চেয়ে আপনার কোড, ডেটা এবং কন্ট্রোলগুলোর বিষয়ে কঠিন প্রশ্ন করার বিষয়। একটি সিস্টেম অডিট মূল্যায়ন করে যে আপনার তথ্য সম্পদগুলো নিরাপদ কি না, আপনার ডেটা সঠিক থাকছে কি না এবং আপনার রিসোর্সগুলো আসলেই আপনি যেভাবে ভাবছেন সেভাবে কাজ করছে কি না।
একটি কার্যকর সিস্টেম মানেই যে সেটি নির্ভরযোগ্য, তা নয়। একটি একাডেমিক রেকর্ডস প্ল্যাটফর্ম হয়তো সঠিকভাবে শিক্ষার্থীদের ভর্তি করতে পারে এবং নিখুঁত ট্রান্সক্রিপ্ট তৈরি করতে পারে, কিন্তু পর্দার আড়ালে পাসওয়ার্ডগুলো plain text হিসেবে সংরক্ষণ করতে পারে। একটি লজিস্টিকস ড্যাশবোর্ড হয়তো নিখুঁত ডেলিভারি টাইম দেখাতে পারে, কিন্তু একই সাথে পাবলিকলি পড়া যায় এমন সোর্স কোডে তার ডেটাবেস ক্রেডেনশিয়াল প্রকাশ করে দিতে পারে। সিস্টেম অডিটিং এই ব্যবধান দূর করার জন্যই কাজ করে।
একটি সিস্টেম অডিট আসলে কী কী বিষয় কভার করে
মূলগতভাবে, একটি সিস্টেম অডিট তিনটি জিনিসের ওপর নজর দেয়: confidentiality (গোপনীয়তা), integrity (অখণ্ডতা) এবং efficiency (দক্ষতা)। Confidentiality মানে হলো আপনার স্টুডেন্ট রেকর্ড, ট্রানজ্যাকশন লগ বা পেশেন্ট ফাইলগুলো শুধুমাত্র সঠিক ব্যক্তিদের কাছেই সহজলভ্য। Integrity মানে হলো ডেটা যেন নিজে থেকে নষ্ট না হয়, তার উৎস বা ধারাবাহিকতা হারিয়ে না ফেলে অথবা সময়ের সাথে সাথে বাস্তবের সাথে অমিল না ঘটে। Efficiency মানে হলো আপনার সার্ভার, সার্ভিস এবং প্রসেসগুলো যেন কেবল রিসোর্স খরচ না করে বরং প্রকৃত ভ্যালু বা উপযোগিতা প্রদান করে।
এই তিনটি গুণাবলী যাচাইযোগ্য হতে হবে। ডেটাবেস এখনো ক্র্যাশ করেনি বলে সেটিকে বিশ্বাস করা কোনো যাচাইকরণ নয়। একটি প্রকৃত অডিট এমন প্রমাণ তৈরি করে যা আপনি রেগুলেটর, গ্রাহক বা আপনার নিজের ভবিষ্যৎ সত্তার কাছে তুলে ধরতে পারবেন যখন তারা জানতে চাইবে যে আপনি কীভাবে নিশ্চিত হলেন যে সিস্টেমটি ত্রুটিহীন।
সিস্টেম অডিটের প্রধান ধরনসমূহ
সব অডিট একই বিষয় নিয়ে কাজ করে না। আপনি যে ধরনের ঝুঁকির সম্মুখীন হচ্ছেন তার ওপর ভিত্তি করে আপনার নিচের যেকোনো একটি বা একাধিক অডিটের প্রয়োজন হতে পারে:
Application Audit. এটি দেখে যে সফটওয়্যারের লজিক সঠিক কি না। ক্যালকুলেশনগুলো কি নির্ভুল? State machines কি edge cases গুলো সঠিকভাবে হ্যান্ডেল করতে পারে? সংবেদনশীল ডেটা নিয়ে কাজ করা প্রতিটি ফাংশনের ভেতরে কি অথরাইজেশন নিশ্চিত করা হয়েছে? অ্যাপ্লিকেশন-লেভেলের একটি ক্লাসিক ব্যর্থতা হতে পারে এমন একটি গ্রেডিং মডিউল যা দশমিক সংখ্যা ভুলভাবে রাউন্ড করে, অথবা একটি স্কলারশিপ এলিজিবিলিটি চেক যা ড্রপডাউন ভ্যালু পরিবর্তন করে বাইপাস করা সম্ভব।
Security Audit. এটি অ্যাক্সেস কন্ট্রোল, এনক্রিপশন এবং ভালনারেবিলিটির (দুর্বলতা) ওপর গুরুত্ব দেয়। এটি যাচাই করে যে কে কোন রেকর্ড পড়তে পারে, ডেটা কি ট্রান্সমিট করার সময় এবং স্টোরেজে এনক্রিপ্টেড আছে কি না, এবং আপনার সেশন ম্যানেজমেন্ট কি ট্যাম্পারিং বা কারচুপির বিরুদ্ধে টিকে থাকতে পারে কি না। এটি আরও পরীক্ষা করে যে আপনার ডিপেন্ডেন্সিগুলোতে এমন কোনো পরিচিত দুর্বলতা আছে কি না যা আপনাকে গোপনে ঝুঁকির মুখে ফেলতে পারে।
Database Audit. ডেটা ইন্টিগ্রিটি বা অখণ্ডতা এখানেই থাকে। Referential constraints কি কার্যকর করা হয়েছে? ব্যাকআপগুলো কি আসলেই রিস্টোর করা সম্ভব, নাকি আপনি কেবল সেগুলো শিডিউল করেছেন? রিটেনশন পলিসিগুলো কি আইনি প্রয়োজনীয়তার সাথে সামঞ্জস্যপূর্ণ? একটি ডেটাবেস অডিট রিকভারি প্ল্যানগুলোও পরীক্ষা করে, কারণ যে ব্যাকআপের আপনি কখনো মহড়া দেননি, তা কেবল একটি তত্ত্ব মাত্র।
Network Audit. এটি সার্ভার, ফায়ারওয়াল, রাউটিং এবং অ্যাভেইল্যাবিলিটি পরীক্ষা করে। এটি নিশ্চিত করে যে কেবল প্রয়োজনীয় পোর্টগুলোই খোলা আছে, ফায়ারওয়াল রুলগুলো ডকুমেন্ট করা আছে এবং আপনার ইনফ্রাস্ট্রাকচার ট্রাফিক স্পাইক বা denial-of-service ইভেন্ট সামলাতে সক্ষম কি না। এটি কেবল অ্যাপ্লিকেশন লেয়ার নয়, অপারেটিং সিস্টেমগুলো প্যাচ করা আছে কি না তাও পরীক্ষা করে।
Compliance Audit. এটি বাহ্যিক নিয়মাবলীর বিপরীতে সিস্টেমটিকে পরিমাপ করে। স্টুডেন্ট প্ল্যাটফর্মগুলোর হয়তো FERPA মেনে চলা প্রয়োজন হতে পারে। হেলথকেয়ার সিস্টেমগুলোকে অবশ্যই HIPAA পূরণ করতে হবে। পেমেন্ট প্রসেসিংয়ের জন্য PCI-DSS অ্যালাইনমেন্ট প্রয়োজন। কমপ্লায়েন্স মানে কেবল নিরাপদ থাকা নয়; এটি হলো কোনো বাহ্যিক কর্তৃপক্ষের কাছে সেই নিরাপত্তা প্রদর্শন করতে সক্ষম হওয়া।
Operational Audit. কোড হলো গল্পের মাত্র অর্ধেক। এই অডিট রক্ষণাবেক্ষণ প্রক্রিয়া, সাপোর্ট ওয়ার্কফ্লো, চেঞ্জ ম্যানেজমেন্ট এবং ডকুমেন্টেশনের সতেজতা পরীক্ষা করে। একটি চমৎকার অ্যাপ্লিকেশনও দায় বা বোঝা হয়ে দাঁড়াতে পারে যখন এর ডিপ্লয়মেন্ট পাইপলাইন বোঝার একমাত্র ব্যক্তিটি প্রতিষ্ঠান ছেড়ে চলে যান।
একটি বাস্তব উদাহরণ: EduManage v1.0 অডিট করা
আমি সম্প্রতি একটি একাডেমিক ম্যানেজমেন্ট প্ল্যাটফর্ম EduManage v1.0-এর ওপর একটি অভ্যন্তরীণ নিরাপত্তা এবং অ্যাপ্লিকেশন অডিট চালিয়েছি। সিস্টেমটি এনরোলমেন্ট, রেকর্ড এবং গ্রেডিং পরিচালনা করত। এটি আসল স্টুডেন্ট ডেটা স্পর্শ করার আগেই আমাদের জানা প্রয়োজন ছিল যে এটি নির্ভরযোগ্য কি না। আমি একটি সহজ ছয়-ধাপের প্রক্রিয়া অনুসরণ করেছি এবং আমি বেশিরভাগ অভ্যন্তরীণ অডিটের জন্য এই একই কাঠামো অনুসরণ করার পরামর্শ দিই।
পরিধি পরিকল্পনা করুন। সীমাহীন অডিট অন্তহীন একঘেয়ে কাজে পরিণত হয়। আমরা সুনির্দিষ্টভাবে নির্ধারণ করেছি কোন মডিউলগুলো পরিধির অন্তর্ভুক্ত ছিল: authentication, record management, এবং core enrollment workflows। থার্ড-পার্টি ইন্টিগ্রেশন এবং ফিজিক্যাল ইনফ্রাস্ট্রাকচার স্পষ্টভাবে পরিধির বাইরে রাখা হয়েছিল। আমরা দুই সপ্তাহ সময় বরাদ্দ করেছি এবং প্রশ্নগুলোর উত্তর দিতে সক্ষম মূল ব্যক্তিদের চিহ্নিত করেছি। এই স্বচ্ছতা স্কোপ ক্রিপ (scope creep) প্রতিরোধ করে এবং সবাইকে একই লক্ষ্যে অবিচল রাখে।
তথ্য এবং নথিপত্র সংগ্রহ করুন। আমি আর্কিটেকচার ডায়াগ্রাম, API ডকুমেন্টেশন, ডাটাবেস স্কিমা এবং পূর্ববর্তী ইনসিডেন্ট রিপোর্টগুলো সংগ্রহ করেছি। আমি ডেপ্লয়মেন্ট প্র্যাকটিস এবং টেক স্ট্যাক চয়েস সম্পর্কে লিড ডেভেলপারের সাথে কথা বলেছি। আপনি যা বোঝেন না তা পরীক্ষা করতে পারবেন না, এবং এই পর্যায়ে করা অনুমানগুলো পরবর্তী প্রতিটি ফলাফলকে ত্রুটিপূর্ণ করে তুলবে।
টেস্ট সম্পন্ন করুন। আমরা তিনটি দিক থেকে সিস্টেমটিকে পর্যবেক্ষণ করেছি। একটি কোড রিভিউয়ের মাধ্যমে anti-patterns, injection flaws এবং insecure dependencies খুঁজে বের করার চেষ্টা করা হয়েছে। ফাংশনাল টেস্টগুলো যাচাই করেছে যে বিজনেস রুলস—যেমন এনরোলমেন্ট ক্যাপ এবং প্রাকশর্ত যাচাই (prerequisite checks)—প্রকৃতপক্ষে ইনভ্যালিড স্টেটগুলোকে ব্লক করছে কি না, নাকি কেবল ফ্রন্টএন্ড কোডের আড়ালে লুকিয়ে রাখছে। পেনিট্রেশন টেস্ট একটি বাহ্যিক আক্রমণকারীর মতো কাজ করেছে, যেখানে এক্সপোজড এন্ডপয়েন্টগুলো পরীক্ষা করা হয়েছে এবং রিকোয়েস্ট ম্যানিপুলেট করে দেখা হয়েছে কী কী তথ্য ফাঁস হয় বা সিস্টেমের কোথায় ত্রুটি দেখা দেয়।
ঝুঁকি এবং ফলাফল বিশ্লেষণ করুন। প্রতিটি দুর্বলতা বা ভলনারেবিলিটি সমান গুরুত্বপূর্ণ নয়। আমরা প্রতিটি ফলাফলকে তার ঘটার সম্ভাবনা (likelihood) অনুযায়ী ম্যাপ করেছি এবং
