
أنشئ تحليلات ثابتة مفيدة وخفيفة الوزن باستخدام أدوات مفتوحة المصدر + القليل من الكود الخاص بك
يحتوي هذا المستودع على كود إثبات المفهوم (PoC) لمحادثة ShellCon 2019، "بناء أداتك الخاصة: كيفية كتابة أدوات تحليل ثابت مخصصة وخفيفة الوزن " (الشرائح).
باختصار، يوضح هذا المستودع بعض الأمثلة الملموسة لكيفية بناء بعض التحليلات الثابتة المثيرة للاهتمام باستخدام أدوات مفتوحة المصدر وكمية صغيرة من الكود المخصص.
أمثلة الأكواد في هذا المستودع:
before_actions التي تستخدمها.كيفية عمل الأمثلة
على مستوى عالٍ، يعمل تنفيذ الأمثلة على النحو التالي:
هذا المشروع مُصمم ليُشغَّل باستخدام Docker.
للقيام بذلك، ستحتاج إلى تهيئة بعض الأشياء أولاً.
نظرًا لأن Dockerfile الخاص بنا مبني على
صورة Docker الخاصة بـ semantic، والتي تستضاف على
سجل حزم جيت هاب، ستحتاج إلى تهيئة Docker للاستخدام مع سجل حزم
جيت
هاب.
$ docker login docker.pkg.github.com -u USERNAME -p TOKENdocker build -t lightweight_static_analysis .bash داخل حاوية Docker ثم شغّل السكربتات الخاصة بنا.# Run this
# (Make sure to run this from a terminal in this repo's project root)
$ docker run -it --rm --entrypoint /bin/bash -v $PWD:/lightweight_static_analysis lightweight_static_analysis
# cd into this project's source code within the
# running container
$ cd /lightweight_static_analysis
# Run main.py with different config options, described further below
بعد الحصول على صدفة bash داخل حاوية Docker (انظر أعلاه لمعرفة الأمر docker run)، يمكنك تشغيل main.py بواحدة من عدة أوضاع ممكنة.
/lightweight_static_analysis> $ python3 src/main.py <options>
يمكنك رؤية جميع الخيارات المتاحة بتشغيل src/main.py بدون
خيارات أو بالنظر إلى قسم parser.add_argument في main.py.
فيما يلي بعض الأوامر التي يمكن أن تساعدك في استكشاف قاعدة أكواد Rails بشكل تفاعلي.
أولاً، ستحتاج إلى استنساخ مستودع أو أكثر من مستودعات Rails ووضعها في examples/. إذا كنت بحاجة إلى بعض المستودعات المثال، يمكنك استخدام الكود المصدري لـ rubygems.org، أو أحد المستودعات المدرجة في Open Source Rails.
# Print out the class, super class, defined methods, and before actions
# for all controllers
$ python3 src/main.py --rails-summarize-controllers examples/<repo_name>
# Print out every controller name, grouped by super class
#
# This can find examples where security protections defined in a parent class
# (e.g. ApplicationController or Api::BaseController) aren't applied because
# the vulnerable controller didn't subclass the appropriate class.
$ python3 src/main.py --rails-controllers-by-superclass examples/<repo_name>
# For every before_action used by any controller, list the controllers that
# use that before_action and the routes that it is and isn't applied to
# (e.g. handle the 'except' and 'only" keywords)
#
# This can:
# * Give you quick insight the various before_actions the application defines,
# yielding some intuition as to the code's flow and organization.
# * `verify_with_otp` - Hm, that sounds interesting, I probably want to
# review how that filter is implemented.
# * Show you where a given before_action is and isn't applied across an entire
# code base, potentially leading to bugs where it is inconsistently used
#
# For example
# * Is there a before_action that's used to protect all state0-changing API
# routes except for 1 model? That's strange.
# * Is there an authentication or authorization before_action applied to every
# action in a controller except one? Why?
$ python3 src/main.py --rails-controllers-by-before_action examples/<repo_name>
إذا كنت ترغب في الانتقال إلى بيئة تفاعلية ipdb بعد
اكتمال التحليل بحيث يمكنك فحص كود روبي
المُحلَّل بشكل تفاعلي، يمكنك ذلك أيضاً بتمرير العلم --repl إلى الأوامر أعلاه.
تعتمد هذه الأمثلة على فئات AstNode المختلفة المعرفة في ast_node.py،
وكل الكود الخاص بـ Rails موجود في ruby.py.
exec()s في صدفة JSلم يتم تنظيف هذا التنفيذ أو توثيقه بعد، ولكن انظر إلى batch_parse_json() في main.py وvisit() والطرق الأخرى التي يستدعيها في visitor.py.
يسعدنا التحدث عن هذا العمل بمزيد من التفاصيل، فلا تتردد في فتح مشكلة أو التواصل عبر تويتر: @clintgibler، @defreez.
إذا كنت ترغب في متابعة هذا المشروع وغيره من المشاريع التي نعمل عليها، فاطلع على نشرتنا البريدية tl;dr sec newsletter، حيث نرسل ملخصات مفصلة لأفضل المحادثات الأمنية وروابط لأفضل الأدوات والموارد الأمنية.
إنها نشرة منخفضة الحجم وعالية الإشارة تهدف إلى إبقائك على اطلاع بآخر المستجدات في مجال الأمان حتى تتمكن من أداء عملك بكفاءة وفعالية أكبر، ولديك معلومات مفيدة تشاركها في استراحة أمن المعلومات الخاصة بك.