
إطار عمل تنسيق اختبار الاختراق التصريحي
ديكر هو إطار تنسيق لاختبار الاختراق. يعتمد على لغة تكوين هاشيكورب 2 (نفس لغة التكوين مثل تيرافورم) للسماح بـاختبار الاختراق التصريحي كرمز، بحيث يمكن حفظ اختباراتك وتتبع نسخها وإعادة استخدامها والتعاون فيها مع فريقك أو المجتمع.
مثال على ملف تكوين ديكر:
// يتم سحب المتغيرات من البيئة
// مثال: DECKER_TARGET_HOST
// ستكون متاحة في جميع أنحاء ملفات التكوين كـ var.*
// مثال: ${var.target_host}
variable "target_host" {
type = "string"
}
// تشير الموارد إلى المكونات الإضافية
// يحتاج الموارد إلى أسماء فريدة حتى يمكن استخدام المكونات الإضافية أكثر من مرة
// يتم تعريفها بالشكل: 'resource "plugin_name" "unique_name" {}'
// ستكون مخرجاتها متاحة للآخرين باستخدام الشكل unique_name.*
// مثال: nmap.443
resource "nmap" "nmap" {
host = "${var.target_host}"
plugin_enabled = "true"
}
resource "sslscan" "sslscan" {
host = "${var.target_host}"
plugin_enabled = "${nmap.443 == "open"}"
}
تشغيل مكون إضافي لكل عنصر في قائمة:
variable "target_host" {
type = "string"
}
resource "nslookup" "nslookup" {
dns_server = "8.8.4.4"
host = "${var.target_host}"
}
resource "metasploit" "metasploit" {
for_each = "${nslookup.ip_address}"
exploit = "auxiliary/scanner/portscan/tcp"
options = {
RHOSTS = "${each.key}/32"
INTERFACE = "eth0"
}
}
تكوين معقد يجمع بين for_each مع القيم المتداخلة:
variable "target_host" {
type = "string"
}
resource "nslookup" "nslookup" {
dns_server = "8.8.4.4"
host = "${var.target_host}"
}
resource "nmap" "nmap" {
for_each = "${nslookup.ip_address}"
host = "${each.key}"
}
// لكل عنوان IP، تحقق مما إذا كان nmap وجد المنفذ 25 مفتوحًا.
// إذا كانت الإجابة بنعم، قم بتشغيل ماسح smtp_enum من metasploit
resource "metasploit" "metasploit" {
for_each = "${nslookup.ip_address}"
exploit = "auxiliary/scanner/smtp/smtp_enum"
options = {
RHOSTS = "${each.key}"
}
plugin_enabled = "${nmap["${each.key}"].25 == "open"}"
}
تتوفر عدة تنسيقات للمخرجات ويمكن اختيار أكثر من واحد في نفس الوقت.
تعيين DECKER_OUTPUTS_JSON أو DECKER_OUTPUTS_XML إلى "true" سيخرج ملفات بتنسيق json و xml على التوالي.
.json بالإضافة إلى النص العادي: export DECKER_OUTPUTS_JSON="true".xml بالإضافة إلى النص العادي: export DECKER_OUTPUTS_XML="true"جاء صديقي كورتني للإنقاذ عندما كنت أتعب في ابتكار اسم ووجد ديكر في مسرد كلمات الخيال العلمي... وكان رائعًا.
مخترق مستقبلي؛ خبير برمجيات ماهر في التلاعب بالفضاء الإلكتروني، وخاصة في تجاوز الإجراءات الأمنية.
يتم تركيب مجلدين:
decker-reports حيث سيخرج ديكر ملفًا لكل مكون إضافي تم تشغيله. سيكون اسم الملف {unique_resource_name}.report.txt.examples الذي يحتوي على ملفات تكوين ديكر. يتيح تركيب هذا المجلد إمكانية كتابة التكوينات محليًا باستخدام محررك المفضل مع إمكانية تشغيلها داخل الحاوية.يتم تمرير متغير بيئة واحد:
DECKER_TARGET_HOSTيتم الإشارة إلى هذا في ملفات التكوين كـ {var.target_host}. سيقوم ديكر بالتكرار عبر جميع المتغيرات البيئية المسماة DECKER_*، وإزالة البادئة وتعيين الباقي إلى أحرف صغيرة.
docker run -it --rm \
-v "$(pwd)/decker-reports/":/tmp/reports/ \
-v "$(pwd)/examples/":/decker-config/ \
-e DECKER_TARGET_HOST=example.com \
stevenaldinger/decker:kali decker ./decker-config/example.hcl
عندما ينتهي ديكر من تشغيل التكوين، ابحث في ./decker-reports عن المخرجات.
من المحتمل أن ترغب في تعيين الدليل الذي يكتب فيه ديكر التقارير باستخدام متغير البيئة DECKER_REPORTS_DIR.
سيكون شيئًا كهذا مناسبًا. تأكد فقط من أن ما قمت بتعيينه هو دليل موجود بالفعل.
export DECKER_REPORTS_DIR="$HOME/decker-reports"
ستحتاج أيضًا إلى تعيين مضيف الهدف إذا كنت تقوم بتشغيل أحد ملفات التكوين المثال.
export DECKER_TARGET_HOST="<insert hostname here>"
ثم قم بتشغيل ملف التكوين. انتقل إلى الدليل الجذر لهذا المستودع وشغّل:
./decker ./examples/example.hcl
المساهمات مرحب بها بشدة ومقدَّرة. انظر docs/contributions.md للحصول على الإرشادات.
يوصى باستخدام دوكر للتطوير للحصول على تجربة سلسة. هذا يضمن تثبيت جميع التبعيات وأنها جاهزة للعمل.
ارجع إلى هيكل الدليل أدناه للحصول على نظرة عامة على كود go.
make docker_buildmake docker_run (سيبدأ حاوية دوكر ويفتح جلسة bash تفاعلية)dep ensure -vmake build_allmake runقم بتشغيل make init لإضافة سكريبت pre-commit الذي سيشغل الفحص والاختبارات في كل التزام.
ديكر نفسه هو مجرد إطار يقرأ ملفات التكوين، ويحدد التبعيات في ملفات التكوين، ويشغل المكونات الإضافية بترتيب يضمن أن المكونات الإضافية ذات التبعيات على مكونات إضافية أخرى (مخرجات مكون إضافي كمدخل لمكون آخر) تعمل بعد تلك التي تعتمد عليها.
القوة الحقيقية لـديكر تأتي من المكونات الإضافية. يمكن أن يكون تطوير مكون إضافي بسيطًا أو معقدًا كما تريد، طالما أن النتيجة النهائية هي ملف .so يحتوي على كود المكون الإضافي المُجمّع وملف .hcl في نفس الدليل يُعلن المدخلات التي يتوقع المكون الإضافي أن يقوم المستخدم بتكوينها.
تحقق من docs/building_plugins.md للبدء في أول مكون إضافي لك. يجب أن يستغرق الأمر بضع دقائق فقط لتشغيل مكون إضافي "Hello World" لـ ديكر.
بشكل افتراضي، من المتوقع أن تكون المكونات الإضافية في دليل نسبي إلى مكان وجود ثنائي ديكر، في <decker binary>/internal/app/decker/plugins/<plugin name>/<plugin name>.so. يمكن إضافة مسارات إضافية عن طريق تعيين متغير البيئة DECKER_PLUGIN_DIRS. سيظل مسار المكونات الإضافية الافتراضي مستخدمًا إذا تم تعيين DECKER_PLUGIN_DIRS.
مثال: export DECKER_PLUGIN_DIRS="/path/to/my/plugins:/additional/path/to/plugins"
يجب أن يكون هناك ملف HCL بجوار ملف .so في <decker binary>/internal/app/decker/plugins/<plugin name>/<plugin name>.hcl يحدد مدخلاته ومخرجاته. حاليًا، يتم دعم المدخلات من نوع string و list و map فقط. يجب أن يحتوي كل مدخل على كتلة input تبدو هكذا:
input "my_input" {
type = "string"
default = "some default value"
}
.
├── build
│ ├── ci/
│ └── package/
├── cmd
│ ├── decker
│ │ └── main.go
│ └── README.md
├── deployments/
├── docs/
├── examples
│ └── example.hcl
├── githooks
│ ├── pre-commit
├── Gopkg.toml
├── internal
│ ├── app
│ │ └── decker
│ │ └── plugins
│ │ ├── a2sv
│ │ │ ├── a2sv.hcl
│ │ │ ├── main.go
│ │ │ └── README.md
│ │ └── ...
│ │ ├── main.go
│ │ ├── README.md
│ │ └── xxx.hcl
│ ├── pkg
│ │ ├── dependencies/
│ │ ├── gocty/
│ │ ├── hcl/
│ │ ├── paths/
│ │ ├── plugins/
│ │ └── reports/
│ └── README.md
├── LICENSE
├── Makefile
├── README.md
└── scripts
├── build-plugins.sh
└── README.md
resource في الملف، وتشغيل المكونات الإضافية بالمدخلات المحددة.ديكر. إذا كنت تستخدم صورة دوكر kali (docker image) (stevenaldinger/decker:kali)، فيجب أن تكون جميع التبعيات مثبتة لجميع ملفات التكوين وستعمل الأمور بسلاسة.ديكر، وملفات التكوين، وملفات تكوين المكونات الإضافية، والتقارير المُنشأة.