همیشه و هر زمان یکی از اخبار همیشگی تکنولوژی، خبرها و اطلاعیههای مربوط به نفوذ به سیستمهایی است که به نحوی حاوی اطلاعات طبقهبندی شده، اطلاعات شخصی و امثال اینها هستند و هکرها توانستهاند با استفاده از آسیبپذیریهایی که در این سیستمها وجود داشتهاند استفاده کنند و به آنها نفوذ کنند.
اگر به هر نحوی با توسعه، استقرار و نگهداری سیستمهای نرمافزاری سر و کار دارید، دانستن آسیبپذیریهای آنها از مهمترین کارهاست. چرا که کمک میکنه قبل از نفوذ خرابکارها نسبت به برطرف کردن این آسیبپذیریها اقدام کنید.
اگر کمی در مورد آسیبپذیریها جستجو کنید متوجه خواهید شد که سازمانهای مختلفی به صورت پیوسته در حال شناسایی و اطلاع رسانی این آسیبپذیریها هستند و اگر امنیت سیستمهای نرمافزاریتان برایتان اهمیت دارد باید جزو اولین نفراتی باشید که از آنها با خبر میشوید.
یکی از این سازمانها NSA یا همان آژانس امنیت ملی آمریکاست که این اطلاعات را در پایگاه آسیبپذیریها منتشر میکند. تمامی آسیبپذیریها از سال ۲۰۰۲ میلادی تا الان در قسمت دانلود پایگاه آسیبپذیریها قابل دریافت است.
اطلاعات در فرمتهای مختلفی قرار داده شده است از جمله XML و JSON که فرمت XML قدیمی شده و در آینده پشتیبانی نمیشود. در فرمت JSON، آسیبپذیریهای هر سال در یک فایل با نام همان سال آورده شده است و دو فایل دیگر که حاوی اطلاعات به روزرسانی است به شرح زیر است:
هر آسیبپذیری یک نام منحصر به فرد به صورت CVE-2019-0240 دارد که از سه بخش تشکیل شده. بخش میانی سالی است که آسیبپذیری گزارش شده است و بخش آخر شماره این آسیبپذیری در آن سال است.
در اینجا میتوانید یک سند JSON شامل یک نمونه از آسیبپذیریها را مشاهده کنید. همانطور که در این سند مشاهده میکنید، اطلاعات بسیار متنوع و مفیدی هستند و باید از این اطلاعات به خوبی استفاده کرد.
به احتمال زیاد شما هم مثل من بعد از دیدن این حجم بسیار زیاد از اطلاعات مربوط به آسیبپذیریها، به این نتیجه رسیدهاید که بهترین کار پردازش این فایلهای JSON و ذخیره کردنشون در یک پایگاهداده است و از آن جایی که هر آسیبپذیری یک سند JSON است یکی از اولین پایگاه دادههایی که به ذهن خطور میکند پایگاهدادهای همچون MongoDB است.
اما به نظر من دلایل خوبی وجود دارد که استفاده از یک گراف دیتابیس میتواند چشمانداز بهتری از اطلاعات را به ما نشان دهد. آسیبپذیریها از جنبههای مختلفی به هم مرتبط هستند از جمله
اگر این ارتباطات به خوبی و درستی حفظ شوند به یافتن و بازیابی هرچه بهتر آسیبپذیریها کمک میکنه. در هر حال اگر شما هم مثل من فکر میکنید که استفاده از یک گراف دیتابیس گزینه خوبی است، ادامه مطلب را دنبال کنید.
با کمی جستجو متوجه میشوید که تعداد گراف دیتابیسها اصلا کم نیست و انتخاب هر کدامشان میتواند معایب و مزایای خودش را داشته باشد و من قصد دارم که از گراف دیتابیس Neo4j برای ذخیره سازی اطلاعات استفاده کنم. یکی از دلایلی که در قسمت بعد بیشتر در موردش توضیح خواهم داد این موضوع است که Neo4j برای جستجو در پایگاهداده علاوه بر زبان مخصوص به خودش یعنی Cypher امکان استفاده از Graphql را هم فراهم کرده است.
در قسمت دوم نحوه نصب و پیکرهبندی Neo4j به همراه نحوه وارد کردن اطلاعات به Neo4j و راهاندازی Graphql