آسیب‌پذیری‌ها را جدی بگیریم! - قسمت دوم

فهرست

مقدمه

در قسمت اول توضیحاتی کلی درباره آسیب‌پذیری‌ها، مراکز انتشار اطلاعیه‌ها و همچنین پایگاه‌داده Neo4j صحبت شد و در این قسمت به نحوه نصب و پیکره‌بندی Neo4j، نصب پلاگین‌های مورد نیاز، دریافت اطلاعات آسیب‌پذیری‌ها و وارد کردن آن‌ها در ‌Neo4j خواهم پرداخت.

نصب و راه‌اندازی Neo4j

ابتدا به مرکز دانلود Neo4j رفته و Neo4j Community Edition را دانلود کنید و پس از دانلود Neo4j را در یک دایرکتوری از حالت فشرده خارج کنید. در زمان نوشتن این مطلب آخرین نسخه انتشار یافته 3.5.5 بود.

زیردایرکتوری‌هایی که ما با آن‌ها سر و کار داریم به شرح زیر است:

  • دایرکتوری bin: حاوی اسکریپت‌های اجرایی
  • دایرکتوری conf: شامل فایل neo4j.conf است که فایل پیکره‌بندی Neo4j است
  • دایرکتوری plugins: دایرکتوری مربوط به پلاگین‌ها
  • دایرکتوری import: دایرکتوری مربوط به فایل‌های مورد نیاز برای پر کردن اطلاعات Neo4j است

برای راه‌اندازی سرویس Neo4j می‌توانید به روش زیر عمل کنید

cd bin
./neo4j start

پس از گذشتن چندین ثانیه سرویس Neo4j راه‌اندازی شده است و شما می‌توانید از طریق داشبورد تحت وب آن به آدرس http://localhost:7474 فرامین Neo4j را اجرا کنید. نام‌کاربری و رمزعبور پیش‌فرض neo4j است.

نصب پلاگین‌ها

برای وارد کردن راحتتر اطلاعات مربوط به آسیب‌پذیری‌ها و ضعف‌های نرم‌افزاری و سخت‌افزاری نیاز به پلاگین APOC داریم. این پلاگین را می‌توانید از صفحه گیت‌هاب پروژه APOC دانلود کنید. فایل با پسوند jar را دانلود کنید و در دایرکتوری plugins کپی کنید. در زمان نوشتن این مطلب من از نسخه 3.5.0.5 استفاده کردم.

برای اینکه بتوانیم فایل‌های JSON و CSV مربوط به آسیب‌پذیری‌ها را با استفاده از این پلاگین به Neo4j وارد کنیم، بایستی در فایل پیکره‌بندی Neo4j که در مسیر conf/neo4j.conf قرار دارد، خط زیر اضافه کنیم.

apoc.import.file.enabled=true

پس از اضافه کردن این خط نیاز هست که Neo4j را دوباره راه‌اندازی کنید.

./neo4j restart

دومین پلاگینی که نیاز به نصب دارد، پلاگین Graphql است. همان‌طور که در قسمت اول به آن اشاره شد. با کمک این پلاگین این امکان فراهم می‌شود که برای جستجو در اطلاعات داخل ‌Neo4j از کوئری‌های Graphql استفاده کنیم. این پلاگین را می‌توانید از صفحه گیت‌هاب آن دانلود کنید. همانند پلاگین قبلی، فایل با پسوند jar این پلاگین را دانلود کنید و در دایرکتوری plugins کپی کنید. در زمان نوشتن این مطلب من از نسخه 3.5.0.3 استفاده کردم.

برای فعال کردن این پلاگین نیاز هست که در فایل پیکره‌بندی Neo4j خط زیر را اضافه کنید.

dbms.unmanaged_extension_classes=org.neo4j.graphql=/graphql

و مجددا Neo4j را راه‌اندازی مجدد کنید.

./neo4j restart

دانلود اطلاعات آسیب‌پذیری‌ها(CVE) و ضعف‌ها(CWE)

اکنون که Neo4j به همراه پلاگین‌های مورد نیاز نصب و راه‌اندازی شده است. نیاز به دانلود فایل‌های آسیب‌پذیری داریم. این فایل‌ها را می‌توانید به صورت دستی از اینجا دانلود کنید و در دایرکتوری import قرار دهید یا با استفاده از اسکریپت‌هایی که در گیت‌هاب قرار داده‌ام به روش زیر دانلود کنید.

git clone https://github.com/zaghaghi/neo4j-cve-scripts
cd neo4j-cve-scripts
pip install -r requirements.txt
python download-cve.py --neo4j-dir <Neo4j-Installation-Directory> --start-year 2002 --end-year 2019

علاوه بر آسیب‌پذیری‌ها، اطلاعات جامعی هم در مورد ضعف‌های امنیتی نرم‌افزاری و سخت‌افزاری وجود دارد که می‌بایستی فایل آن را از اینجا دانلود کرده و از حالت فشرده خارج کنید و در دایرکتوری import قرار دهید. در زمان نوشتن این مطلب من این فایل را دانلود و استفاده کردم.

واردکردن اطلاعات در Neo4j

برای وارد کردن تمامی اطلاعات می‌بایستی از اسکریپت‌هایی که در پروژه گیت‌هاب قرار داده‌ام استفاده کنید. قبل از اجرای دستورات زیر بایستی دایرکتوری bin مربوط به Neo4j را در PATH قرار دهید تا بتوانیم به راحتی از برنامه cypher-shell استفاده کنیم.

git clone https://github.com/zaghaghi/neo4j-cve-scripts
cd neo4j-cve-scripts
# اعمال محدودیت‌ها بر روی فیلد‌های منحصر به فرد
cat constraints.cypher | cypher-shell -u neo4j -p <PASSWORD>
# وارد کردن اطلاعات مربوط به آسیب‌پذیری‌ها
cat load-cve.cypher | cypher-shell -u neo4j -p <PASSWORD>
‌# وارد کردن اطلاعات مربوط به ضعف‌ها
cat load-cwe.cypher | cypher-shell -u neo4j -p <PASSWORD>
# ثبت شمای داده‌ها برای گراف‌کیو‌ال
cat graphql-schema.cypher | cypher-shell -u neo4j -p <PASSWORD>

اگر در هنگام اجرای دستورات بالا با خطاهایی مرتبط با کافی نبودن حافظه، می‌توانید مقادیر مربوط به حافظه را در فایل پیکره‌بندی به شکل زیر تغییر دهید.

dbms.memory.heap.initial_size=1024m
dbms.memory.heap.max_size=4096m

اکنون که اطلاعات دانلود شده‌اند و در Neo4j قرار گرفته‌اند زمان کوئری گرفتن بر روی اطلاعات است که در قسمت سوم در این‌باره به صورت کامل صحبت خواهم کرد.