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

فهرستقسمت اول - معرفی مراکز انتشار آسیب‌پذیریقسمت دوم - نصب و پیکره‌بندی گراف دیتابیس Neo4jقسمت سوم - جستجو و گزارش‌گیریمقدمهدر قسمت اول توضیحاتی کلی درباره آسیب‌پذیری‌ها، مراکز انتشار اطلاعیه‌ها و همچنین پایگاه‌داده 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 قرار گرفته‌اند زمان کوئری گرفتن بر روی اطلاعات است که در قسمت سوم در این‌باره به صورت کامل صحبت خواهم کرد.