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

فهرستقسمت اول - معرفی مراکز انتشار آسیب‌پذیریقسمت دوم - نصب و پیکره‌بندی گراف دیتابیس Neo4jقسمت سوم - جستجو و گزارش‌گیریمقدمهدر دو قسمت قبلی نگاهی اجمالی به مراکز انتشار آسیب‌پذیری‌ها، فرمت‌های انتشار آسیب‌پذیری داشتم و همچنین نحوه نصب و پیکره‌بندی گراف دیتابیس Neo4j را بررسی کردم و اطلاعات مربوط به آسیب‌پذیری‌ها را در Neo4j وارد کردم.اکنون زمان نمایش اطلاعات درج شده است.دریافت اطلاعات یک آسیب‌پذیری بر اساس شناسه آنفرض کنید که می‌خواهیم در داشبورد Neo4j اطلاعات مربوط به آسیب‌پذیری به شناسه CVE-2019-9978 را مشاهد کنیم. برای این کار می‌توانیم ابتدا دستور زیر را اجرا کرده و پس از دریافت گره(node) آسیب‌پذیری، آن را بسط می‌دهیم تا اطلاعات دیگر آن را هم مشاهده کنیم.MATCH (n:CVE) WHERE n.name = 'CVE-2019-9977' RETURN nدریافت اطلاعات یک آسیب‌پذیری بر اساس نام محصول و نسخهفرض کنید که شما می‌خواهید برای نوشتن یک برنامه از پایتون نسخه 2.7.16 استفاده کنید. به راحتی و با اجرای دستور زیر می‌توانید آسیب‌پذیری‌های آن را مشاهده کنید.MATCH (c:CVE)-[]->(v:ProductVersion)-[:VERSION_OF]->(p:Product) WHERE p.name = "python" AND v.version_value = "2.7.16" RETURN p, v, cبررسی آسیب‌پذیری یک کتابخانهفرض کنید برای انجام پروژه‌ای به زبان پایتون می‌خواهید از کتابخانه urllib3 استفاده کنید. با استفاده از دستور زیر می‌توانید آسیب‌پذیری‌های مربوط به این کتابخانه با نسخه 1.24.1 را مشاهده کنید.MATCH (c:CVE)-[]->(v:ProductVersion)-[:VERSION_OF]->(p:Product) WHERE p.name = "urllib3" AND v.version_value = "1.24.2" RETURN p, v, cیافتن ضعف‌های امنیتی مرتبط با حافظهیکی از گزارش‌هایی که می‌توان از این اطلاعات به دست آورد، آشنایی با آسیب‌پذیری‌ها و ضعف‌های امنیتی است. به عنوان مثال با اجرای دستور زیر می‌توانید ضغف‌های امنیتی مرتبط با حافظه را ببینید و بشناسیدMATCH (w:CWE) WHERE w.affected_resources = "::Memory::" RETURN w.name, w.title, w.affected_resources LIMIT 25یافتن آسیب‌پذیری بر اساس یک ضعف امنیتیفرض کنید که می‌خواهید متوجه شوید که نرم‌افزار فتوشاپی که با آن کار می‌کنید (به عنوان مثال فتوشاپ نسخه CC 2017.1.1) از ضعف امنیتی CWE-416 رنج می‌برد یا خیر؟ این ضعف امنیتی مربوط به شرایطی است که نرم‌افزار از حافظه‌ای استفاده می‌کند که قبلا آن را آزاد کرده است. برای به دست آوردن شماره نسخه فتوشاپی که گفته شد می‌توانید از لیست نسخه‌های فتوشاپ در ویکی‌پدیا استفاده کنید. شماره نسخه‌ای که عنوان شده برابر است با 18.1.1 است. پس با اجرای دستور زیر می‌توانید متوجه آسیب‌پذیری‌های مرتبط با این ضعف امنیتی شوید.MATCH (c:CVE)-->(w:CWE {name: "CWE-416"}), (c)-->(v:ProductVersion {version_value: "18.1.1"})-->(p:Product {name: "photoshop"}) RETURN v, c, p, w LIMIT 25به تفاوت فیلتر کردن گره‌ها در دستور اخیر و بقیه دستورها دقت کنید. در دستور اخیر فیلتر کردن در دستور MATCH انجام شده است و در دیگر دستورات در WHERE. هر دو روش صحیح هست و می‌توانید استفاده کنید.بررسی Graphqlبرای اینکه مطمئن شویم که تعاریف مربوط به Graphql به درستی در Neo4j وارد شده‌اند می‌توان از فراخوانی زیر استفاده کرد.CALL graphql.schema()نصب و راه Graphiqlبرای کوئری گرفتن با استفاده از Graphql، اگر ابزاری ندارید پیشنهاد می‌کنم که ابزار Graphiql را نصب کنید و اجرا کنید. سپس در قسمت GraphQL Endpoint از آدرس http://localhost:7474/graphql استفاده نمایید.اکنون می‌توانیم همان جستجوهایی که در داشبورد Neo4j و با استفاده از زبان Cypher انجام دادیم را با استفاده از زبان Graphql انجام دهیم.دریافت اطلاعات یک آسیب‌پذیری بر اساس شناسه آنquery { CVE(name: "CVE-2019-9977") { name description } }دریافت اطلاعات یک آسیب‌پذیری بر اساس نام محصول و نسخهquery { ProductVersion(filter: {product: {name: "python"}, version_value: "2.7.16"}) { name version_value cves { name } } }بررسی آسیب‌پذیری یک کتابخانهquery { ProductVersion(filter: {product: {name: "urllib3"}, version_value: "1.24.2"}) { name version_value cves { name } } }یافتن ضعف‌های امنیتی مرتبط با حافظهquery { CWE (filter: {affected_resources: "::Memory::"}, first: 25) { name title affected_resources } }یافتن آسیب‌پذیری بر اساس یک ضعف امنیتیquery { CVE (filter: { problems_single: {name: "CWE-416"}, productVersions_single: {version_value: "18.1.1", product: {name: "photoshop"}} }, first: 25) { name productVersions { name version_value } products { name } problems { name } } }از آن‌جایی که من به تازگی با Graphql آشنا شده‌ام، ممکن است این جستجو‌ها بهینه نباشند. پس اگر جستجو‌های بهینه‌تری می‌شناسید، خوشحال می‌شوم که در نظرات با من و بقیه خوانندگان به اشتراک بگذارید.