Time-of-Check vs. Time-of-Use (TOCTOU)
মূল ধারণা
TOCTOU হলো একটি বিশেষ ধরনের সফটওয়্যার বাগ বা নিরাপত্তা দুর্বলতা, যেখানে কোনো জিনিসের অবস্থা চেক করার সময় (Time of Check) এবং সেই জিনিসটা ব্যবহার করার সময় (Time of Use) — এই দুইয়ের মাঝখানে অবস্থা পরিবর্তন হয়ে যায়।
সহজ কথায়: "আমি যা দেখলাম, ব্যবহার করার সময় আর সেটা নেই বা বদলে গেছে।"
বাস্তব জীবনের উদাহরণ
ধরুন, আপনি bKash-এ টাকা পাঠাবেন বন্ধুকে।
১. Time of Check (চেক করার সময়): আপনি ব্যালেন্স দেখলেন — ৫,০০০ টাকা আছে। ২. এর মাঝে আপনার স্ত্রী অন্য ফোন থেকে ৪,৮০০ টাকা তুলে নিলেন। 3. Time of Use (ব্যবহারের সময়): আপনি ৩,০০০ টাকা পাঠানোর বাটন চাপলেন — কিন্তু এখন তো মাত্র ২০০ টাকা আছে!
চেক আর ব্যবহারের মাঝখানে অবস্থা বদলে গেছে — এটাই TOCTOU সমস্যা।
প্রোগ্রামিং-এ উদাহরণ
ধরুন একটা প্রোগ্রাম একটা ফাইল পড়তে চায়:
# ধাপ ১: Time of Check — ফাইলটা আছে কি না দেখলাম
if os.path.exists("/tmp/myfile.txt"):
# ধাপ ২: এই মুহূর্তে অন্য কেউ ফাইলটা মুছে দিতে পারে
# অথবা ফাইলটাকে অন্য কোনো গুরুত্বপূর্ণ ফাইলের সাথে replace করতে পারে
# ধাপ ৩: Time of Use — এখন ফাইলটা ব্যবহার করছি
with open("/tmp/myfile.txt") as f:
data = f.read()চেক আর ব্যবহারের মাঝে যে সামান্য সময়টুকু — সেটাকে race window বলে। হ্যাকার এই সময়টুকুতে ফাইল বদলে দিয়ে সিস্টেমে আক্রমণ করতে পারে।
নিরাপত্তা ঝুঁকি কেন?
TOCTOU বাগ বিশেষভাবে বিপজ্জনক কারণ:
Privilege Escalation — সাধারণ ইউজার এই বাগ ব্যবহার করে admin/root হয়ে যেতে পারে।
Symbolic Link Attack — হ্যাকার চেকের পর ফাইলটাকে symlink দিয়ে অন্য sensitive ফাইলের দিকে redirect করে দিতে পারে (যেমন
/etc/passwd)।Database Inconsistency — ব্যাঙ্কিং সিস্টেমে double-spending সমস্যা তৈরি হতে পারে।
সমাধানের উপায়
১. Atomic Operations ব্যবহার করুন — চেক আর ব্যবহার একসাথে একটি অবিভাজ্য অপারেশনে করুন। যেমন Python-এ try/except দিয়ে সরাসরি ফাইল খোলা:
try:
with open("/tmp/myfile.txt") as f:
data = f.read()
except FileNotFoundError:
print("ফাইল নেই")২. Locking ব্যবহার করুন — ডাটাবেস বা ফাইলে lock লাগিয়ে রাখুন, যাতে চেকের পর কেউ পরিবর্তন করতে না পারে।
৩. File Descriptor ব্যবহার করুন — ফাইল নাম দিয়ে বারবার access না করে, একবার খুলে file descriptor দিয়ে কাজ করুন।
৪. Database Transactions — ATM/bKash-এর মতো সিস্টেমে transaction ব্যবহার করে atomic check-and-update নিশ্চিত করুন।
সংক্ষেপে
TOCTOU হলো একটি race condition যেখানে দুইটি অপারেশনের মাঝখানের সময়ে data বা state বদলে গিয়ে বাগ বা security vulnerability তৈরি করে। concurrent বা multi-user সিস্টেম ডিজাইন করার সময় এটি মাথায় রাখা খুব জরুরি — বিশেষ করে আপনার মতো যারা ওয়েব platform চালান, যেখানে একসাথে অনেক user একই resource access করেন।
Comments (0)
Login to leave a comment.