برنامهنویسی برای متخصصان امنیت
برخی مواقع، شرایط ایجاد میکند کارشناسان امنیتی برای حل مشکلات دست بهکار شوند و راهحلهایی برای رفع رخنههای امنیتی ابداع کنند. بهطور مثال، در برخی از سازمانها یکسری بازرسیهای امنیتی باید به شکل روزانه انجام شوند و این احتمال وجود دارد که دپارتمان امنیتی موفق نشوند در یک روز تمامی بازرسیها را انجام داده و چکلیستهای مربوطه را آماده کند، در چنین شرایطی خودکارسازی وظایف از طریق ساخت اسکریپتها یا برنامههای سفارشی از بروز یک چنین اشتباهاتی پیشگیری میکنند.کارشناسان امنیتی باید حداقل به یک یا دو زبان برنامهنویسی تسلط داشته باشند تا هر زمان نیاز بود مشکلات را برطرف کنند. در سویی دیگر، تسلط بر زبانهای برنامهنویسی مزیت دیگری نیز دارد. متخصصان امنیتی که مسلط به زبانهای برنامهنویسی سطح پایین همچون اسمبلی یا سی هستند، به خوبی میتوانند کدهای مربوط به نرمافزارهای اجرایی را درون دیساسمبلرها (Disassemblers) وارد کرده و با رصد نقطه به نقطه دستورالعملهایی که درون پردازنده مرکزی اجرا میشوند موارد مشکوک را شناسایی کنند. به عبارت دقیقتر، زمانی که نرمافزارهای ضدویروس قادر به شناسایی تهدیدی نیستند، کارشناسان امنیتی باید در سطح پایین فایلهای اجرایی را بررسی و تحلیل کنند تا بتوانند هرگونه فعالیت مشکوک یک برنامه مخرب را شناسایی کنند.
کدامیک از زبانهای برنامهنویسی تعامل نزدیکی با امنیت سایبری دارند؟
برنامهنویسی از آن دسته موضوعاتی است که بسیاری از مردم به ویژه افراد مبتدی هراس عجیبی از آن دارند، زیرا به صبر و حوصله زیاد، درک صحیح ترکیبات نحوی و زکاوت نیاز دارد. در برخی از کشورها برنامهنویسان به شکل رایگان به مردم یاد میدهند که چگونه با استفاده از زبانهای برنامهنویسی، نرمافزارهای کاربردی طراحی کنند. کارشناسان امنیتی میگویند: «افرادی که شغل آنها مرتبط با فناوریاطلاعات است باید در جریان جدیدترین تغییر و تحولات امنیت سایبری باشند و از یادگیری زبانهای برنامهنویسی غافل نشوند. همچنین، به متخصصان امنیت سایبری توصیه میشود حداقل به فکر یادگیری یک یا دو زبان برنامهنویسی پر کاربرد شبیه به سی/سیپلاسپلاس، پایتون، جاوااسکریپت، PHP ، SQL یا اسمبلی باشند.»
چرا یادگیری برنامهنویسی در امنیت سایبری جایگاه ویژهای دارد؟
تقریبا غیر ممکن است که شخصی بتواند تمامی نقشهای یک تیم سایبری را بر عهده گرفته و تمامی کارها را به شکل موثری انجام دهد، با این حال برای تمامی متخصصان مهم است که دانش عمومی در ارتباط با فناوریهای مختلف داشته باشند. این دانش عمومی برای درک تهدیداتی که ممکن است با آن روبرو شوند ارزشمند است. چالشهای امنیتی محدود به نوع خاصی از حملات همچون مهندسی اجتماعی یا تزریق کد اسکیوال نیست. به عنوان یک متخصص فضای مجازی، مهم است که علل و علائم هر گونه تهدیدی که با آن روبرو میشوید را به درستی درک کنید. در اغلب موارد مدیرانعامل نیازی ندارند در مورد کدنویسی دانشی کسب کنند، هرچند آشنایی با کدنویسی در برخی مواقع مزیتهایی را برای آنها به همراه میآورد. دانش برنامهنویسی میتواند بینش لازم برای تشخیص این موضوع که چه نرمافزاری رفتار مشکوکی دارد، آیا قطعه کدی مخرب است یا خیر در اختیارتان قرار میدهد. به همین دلیل است که بیشتر برنامههای آموزش امنیت سایبری بر لزوم یادگیری برنامهنویسی تاکید خاصی دارند و دانشپژوهان را ملزم میکنند حداقل در یک دوره مقدماتی شرکت کنند.
برنامهنویسی اجازه میدهد در ارتباط با نحوه اجرای برنامههای کاربردی، نقش سیستمعاملها در ایمنسازی سامانهها و نحوه اجرای برخی فرآیندها اطلاعات مفیدی کسب کنید. برای یک متخصص امنیت سایبری تسلط بر یک زبان برنامهنویسی میتواند به میزان قابل توجهی در تشخیص آسیبپذیریها در یک برنامه خاص و اینکه چگونه یک مهاجم میتواند از این آسیبپذیریها سوءاستفاده کند کمک فراوانی کند. با این حال، هیچ زبان برنامهنویسی درک کاملی از نقاط ضعف برنامهها و سختافزارها ارائه نمیدهد. بهطور مثال، تسلط بر زبان C میتواند به شما در تشخیص نقاط آسیبپذیری که باعث به وجود آمدن مشکل سرریز بافر در نرمافزارها میشوند کمک کند. آشنایی با زبان برنامهنویسی پرل میتواند در آزمایش برنامههای مربوط به خطاها راهگشا باشد. تسلط بر جاوااسکریپت میتواند در شناسایی مشکلات امنیتی در برنامههای وب مفید باشد و تسلط بر زبان پرسوجوی ساخت یافته SQL کمک میکند مانع پیادهسازی موفقیتآمیز حملات تزریق کد شوید.
1. C و C++
سی و سی پلاسپلاس در گروه زبانهای برنامهنویسی سطح پایین طبقهبندی میشوند که به عنوان یک متخصص امنیت سایبری باید اطلاعات کافی در مورد ترکیب نحوی آنها داشته باشید. این زبانها امکان دسترسی به زیرساختهای سطح پایین فناوریاطلاعات همچون حافظه اصلی و پردازههای سیستمی را فراهم میکنند که در صورت عدم محافظت مناسب، هکرها میتوانند به راحتی از آنها سوء استفاده کنند. زبان برنامهنویسی سی ستون فقرات بیشتر سیستمعاملها را شکل میدهد. یک زبان برنامهنویسی قدرتمند، انعطافپذیر و کارآمد که میتواند برای انجام طیف گستردهای از کاربردها همچون رمزنگاری، پردازش تصویر و برنامهنویسی شبکه (سوکت) استفاده شود.
از منظر امنیت سایبری، مهاجمی که مهارت زیادی در زبان برنامهنویسی سی دارد، قادر است آسیبپذیریهای درون سامانههای کامپیوتری را شناسایی کرده و به بهرهبرداری از آنها بپردازد. به همین دلیل متخصصان سایبری باید به دنبال یادگیری این زبان باشند تا بتوانند پیش از هکرها نقاط ضعف را شناسایی کرده و به مقابله با آنها بپردازند. از آنجایی که زبان سی پایه و اساس طراحی بسیاری از سیستمعاملها است، نوک پیکان بیشتر حملات متوجه سیستمعاملها و برنامههایی است که با استفاده از این زبان نوشته شدهاند. سی پلاسپلاس برادر بزرگتر زبان سی با ارائه مفهوم ارثبری و وراثت به برنامهنویسان اجازه میدهد به شکل ساختیافتهتری برنامههای کاربردی را طراحی کنند. این زبان برنامهنویسی به لطف کتابخانههای غنی به برنامهنویسان اجازه میدهد انواع مختلفی از برنامههای کاربردی را ایجاد کنند. برنامههای امنیتی قدرتمندی به زبان برنامهنویسی سی پلاسپلاس نوشته شدهاند که از آن جمله میتوان به Nmap ابزار نقشهبرداری از شبکه اشاره کرد.
بدون تردید سی پلاسپلاس یک زبان برنامهنویسی قدرتمند است که دسترسی ساده به بسیاری از منابع و بخشهای داخلی سامانهها را امکانپذیر میکند. از آنجایی که بخش عمدهای از حملات سایبری با هدف بهرهبرداری از منابع سیستمی و پیدا کردن نقضهای امنیتی مستتر در زیرساختها طراحی میشوند، به عنوان یک متخصص سایبری باید شناخت کافی از ترکیب نحوی زبان س پلاسپلاس داشته باشید تا بتوانید با ساخت برنامههای کاربردی کوتاه این نقضها را شناسایی کنید. برخی از تازهواردان به دنیای برنامهنویسی تصور میکنند به دلیل اینکه سیپلاسپلاس یک زبان مدرن است، یادگیری آن نسبت به سی راحتتر است. در واقع این دو زبان به قدری با هم مرتبط هستند که یادگیری آن برای افراد تازهکار کمی مشکل است. رمزنگاری، مدیریت استثناءها و بررسی ویژگیهای امنیتی مختلف در زبان سی پلاسپلاس به صرف زمان قابل توجهی نیاز دارد. در مجموع متخصصان امنیت سایبری که تسلط کافی به زبانهای برنامهنویسی سی و سیپلاسپلاس دارند به خوبی میدانند که چگونه به حملات هدفمندی که زیرساختهای سطح پایین را با چالش جدی روبرو میکنند پاسخ دهند.
2. پایتون
پایتون یک زبان برنامهنویسی سطح بالا است که به شکل فزایندهای توسط کارشناسان سایبری استفاده میشود. به عبارت دقیقتر، این زبان برنامهنویسی همه منظوره نه تنها از سوی کارشناسان شبکه برای خودکارسازی وظایف استفاده میشود، بلکه توسط کارشناسان امنیتی نیز برای کدنویسی و خودکارسازی یکسری فرآیندهای امنیتی استفاده میشود. خوانایی کدها، ترکیب نحوی ساده قابل فهم، کوتاه بودن کدها، کتابخانههای گسترده برای انجام کارهای مختلف و انعطافپذیری زیاد در ساخت برنامههای کاربردی باعث شده تا پایتون از سوی کارشناسان امنیتی با استقبال خوبی روبرو شود. به بیان دیگر، پایتون به شما اجازه میدهد هرگونه کاری که قصد انجام آنرا دارید را در قالب یک برنامه کاربردی ایجاد کرده و به سادهترین شکل یک برنامه کاربردی خاصمنظوره یا همه منظوره ایجاد کنید. بهطور مثال، میتوانید از این زبان برای ارسال بستههای TCP به ماشینها، تجزیه و تحلیل بدافزارها و ساخت ماشینهای تشخیص نفوذ استفاده کرده و وابستگی خود به ابزارهای شخص ثالث را کمتر کنید. با اینحال، برخلاف سی یا سیپلاس پلاس پایتون سطح دسترسی پایین ندارد. بنابراین، ممکن است چشمانداز دقیقی از منابع سختافزاری در اختیارتان قرار ندهد. کتابخانههای متعددی که برای پایتون آماده شدهاند به متخصصان امنیت سایبری کمک میکنند ابزارهای تحلیلگر امنیتی و اسکریپتهای جمعآوری اطلاعات را به شیوه شخصی توسعه دهند. یادگیری پایتون ضمن آنکه به پیشرفت سطح مهارتهای شما به عنوان یک متخصص امنیت سایبری میافزاید به شما در شناسایی آسیبپذیریها و چگونگی وصله کردن آنها کمک میکند.
3. جاوا اسکریپت
جاوااسکریپت یک زبان برنامهنویسی سطح بالا است که به عنوان زبان برنامهنویسی بینالمللی وب یا در اصطلاح تخصصی lingua franca از آن نام برده میشود. جاوااسکریپت یک فناوری زیربنایی است که قدرت خاصی به اینترنت بخشیده است. در وهله اول، جاوااسکریپت با هدف اضافه کردن ویژگی تعاملی به صفحات وب استفاده میشد. درست است که جاوااسکریپت ابتدا در سمت کلاینت و مرورگرهای وب پیادهسازی شده بود، اما اکنون میتوان از این زبان در انواع مختلف زیرساختهای میزبان همچون سمت سرور در بانکهای اطلاعاتی و برنامههای آفلاین شبیه به برنامههای پیدیاف استفاده کرد. بنابراین، به دلیل کاربرد گستردهای که دارد، یادگیری جاوااسکریپت اجازه میدهد یک قدم جلوتر از هکرها گام بردارید. یادگیری جاوااسکریپت به معنای آشنایی با مفاهیم زیربنایی وبسایتها و نحوه کار آنها، برنامههای وبمحور و کدهایی است که ممکن است به شکل مخرب درون صفحات وب قرار گیرد.
بهطور مثال، اسکریپتنویسی cross-site یک نوع حمله مبتنی بر جاوااسکریپت است که مهاجم کدهای مخرب را درون یک برنامه وب قرار میدهد. کارشناسان امنیتی که تسلط کافی به زبان برنامهنویسی جاوااسکریپت دارند، به خوبی میتوانند به مقابله با این مدل حملات بپردازند. اگر علاقمند به طراحی برنامههای وبمحور ایمن هستید، جاوااسکریپت باید اولین انتخاب شما باشد. امروزه توسعهدهندگان از جاوااسکریپت برای طراحی برنامههای وب تعاملی، موبایل و وب استفاده میکنند. با توجه به اینکه جاوااسکریپت یک زبان برنامهنویسی سطح بالا است، قابلیتهای عمومی که ارائه میکند در مقایسه با پایتون، سی و سیپلاسپلاس محدودتر است، با این حال کارشناسان امنیتی برای ایمنسازی زیرساختها و به ویژه وبسایتها باید به فکر یادگیری آن باشند. با توجه به اینکه حملات سایبری که وب را نشانه رفتهاند، روند تصاعدی پیدا کردهاند و آسیبپذیریهای جاوااسکریپت هدف اصلی هکرها است باید به شکل جدی به فکر یادگیری جاوااسکریپت باشید.
4. php
پیاچپی یک زبان برنامهنویسی سمت سرور برای توسعه وبسایتها است. از آنجایی که بیشتر وبسایتها با استفاده از این زبان ساخته میشوند، یادگیری پیاچپی به شما در مقابله با نفوذگران کمک فراوانی میکند. بهطول مثال، در حملات انکار سرویس توزیع شده (DDoS) سعی میشود دسترسی کاربران به برنامههای وب را مختل کرده و به این شکل به کسبوکارها آسیب جدی وارد کرد. تسلط بر زبان برنامهنویسی پیاچپی در تعامل با مهارتهای دیگری شبیه به جاوااسکریپت اجازه میدهد راهحلهای امنیتی محکمی را برای ایمنسازی زیرساختها اتخاذ کنید.
5. SQL
زبان پرسوجوی ساخت یافته (Structured Query Language) بیشتر در ارتباط با مدیریت دادههای ذخیره شده در پایگاههای داده استفاده میشود. به دلیل رشد انفجاری سامانههای ذخیرهسازی دادهها از SQL به شکل گستردهای برای حفظ و بازیابی دادهها استفاده میشود. هکرها نیز به شکل فزایندهای به دنبال بهکارگیری SQL با هدف آسیبزدن به دادهها یا ویرایش دادههای ذخیره شده در بانکهای اطلاعاتی هستند. بهطور مثال، حملات تزریق کد اسکیوال با هدف سوءاستفاده از آسیبپذیریهای موجود در بانکهای اطلاعاتی استفاده میشود. حملاتی که عمدتا به دنبال سرقت یا تغییر دادههای ذخیره شده در پایگاههای داده هستند. بنابراین، درک صحیح نحوه استفاده از این زبان، آشنایی با ترکیب نحوی اسکیوال و بایدها و نبایدهای این زبان در پیشبرد سطح مهارتهای متخصصان امنیت سایبری کمک فراوانی میکند.
6. اسمبلی
اسمبلی از معدود زبانهای برنامهنویسی است که بخش عمدهای از دانشآموختگان رشته کامپیوتر از آن فراری هستند. با اینحال، در فهرست ما اسمبلی یک زبان برنامهنویسی کاملا سطح پایین است که هر فردی نمیتواند به راحتی از آن استفاده کند. در واقع اسمبلی نزدیکترین زبان به کدهای ماشین یا همان صفرها و یکها است. اسمبلی به کارشناسان امنیتی اجازه میدهد به شکل مستقیم با سختافزارهای سیستمی در ارتباط باشند و هرگونه دستورالعملی که یک برنامه اجرا میکند را خط به خط دنبال کند. البته توجه داشته باشید در حالت عادی اسمبلی به شما اجازه دسترسی به سورسکدهای یک برنامه را نمیدهد، بلکه اجازه میدهد دستورالعملهایی که باعث میشوند مقادیر درون ثباتهای پردازنده مرکزی تغییر پیدا کنند را دنبال کرده و با رصد خط سیر دستورات متوجه شوید یک برنامه حاوی کدهای مخرب نیست. البته دستیابی به یک چنین سطح از تخصصی به مهارت زیاد نیاز دارد. اسمبلی به شما امکان میدهد با بخشهای خاصی از حافظه و ثباتهای کامپیوتر در تعامل باشید و هرگونه استفاده از منابع سختافزاری را به دقت بررسی کنید. البته توجه داشته باشید در روزهای آغازین ترکیب نحوی این زبان برای شما غیر قابل قبول خواهد بود، زیرا دستورات شکل و شمایل کاملا متفاوتی دارند. بهطور مثال، در اینجا قصد داریم برنامه Hello world! را با استفاده از اسمبلر NASM بنویسیم. همان گونه که در قطعه کد زیر مشاهده می کنید در یک برنامه اسمبلی باید آدرس خروجی و تعداد دقیق بایتهایی که میخواهید برای برنامه خود رزرو کنید را مشخص کنید. NASM در پلتفرمهای لینوکسی و ویندوز قابل استفاده است.
global _start
section .text
_start: mov rax, 1
mov rdi, 1
mov rsi, message
mov rdx, 13
syscall
mov rax, 60
xor rdi, rdi
syscall
section .data
message: db “Hello world!”, 10
تمامی این دستوراتی که مشاهده میکنید در نهایت پیغام Hello world! را چاپ میکنند. با اینحال، اسمبلی یک مزیت بزرگ نسبت به تمامی زبانها دارد. برنامههای نوشته شده به این زبان اندازهای به مراتب کمتر از سایر زبانها دارند. هکرهایی که مسلط به زبان اسمبلی هستند و زیرساخت سازمانی را هدف قرار دهند، بدون تردید یک تهدید جدی خواهند بود، زیرا این افراد میتوانند یک سیستم را در سطح بایتها دستکاری کنند. به احتمال زیاد، اسمبلی وحشتناکترین زبان برنامهنویسی برای یادگیری است، اما اگر وقت کافی برای یادگیری آن اختصاص دهید، درک عمیق و کاملی از زیرساختی که قرار است از آن دفاع کنید به دست خواهید آورد.
از کجا باید شروع کنیم؟
پیشنهاد میکنم ابتدا به سراغ یادگیری پایتون بروید. زمانیکه شروع به مطالعه امنیت سایبری کردم، تقریبا هیچ پسزمینهای در ارتباط با کامپیوتر نداشتم. بنابراین سعی کردم چند زبان برنامهنویسی یاد بگیرم، اما درک آنها دشوار بود، به همین دلیل ابتدا کار را با پایتون آغاز کردم. پایتون زبانی ساده و قدرتمند است که از ترکیب نحوی سادهای نسبت به سایر زبانها برخوردار است. یادگیری پایتون به عنوان نقطه شروع، شما را با اصطلاحات خاص زبانهای دیگر آشنا کرده و در نتیجه در شناخت بهتر زبانهای برنامهنویسی کمک فراوانی میکند. همچنین بد نیست بدانید که متوسط حقوق یک توسعهدهنده پایتون در سایت Indeed.com چیزی در حدود 118 هزار دلار در سال ذکر شده است.