Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
PKCS11SSHAgent — SRO PKCS11 – SSH Agent CNG هو وكيل ويندوز سيادي، فائق الخفة وبدون تبعيات، يدمج PKCS#11، SSH-agent، Pageant وCNG/Smartcard في ملف ثنائي واحد قوي. مصمم للبيئات المتطلبة، يوفر تشفيرًا ماديًا أصليًا، وعزل service/userland، ودعمًا كاملاً للبطاقات الذكية. | Kitploit
أدوات/GitHubGitHub/sanmilie/pkcs11sshagent
أدوات التشفير/فك التشفيرالتشفيرأمن الأجهزةالأدوات والمكوناتإدارة الهوية والوصول (IAM)المصادقة
GitHubsanmilie/pkcs11sshagent

PKCS11SSHAgent

SRO PKCS11 – SSH Agent CNG هو وكيل ويندوز سيادي، فائق الخفة وبدون تبعيات، يدمج PKCS#11، SSH-agent، Pageant وCNG/Smartcard في ملف ثنائي واحد قوي. مصمم للبيئات المتطلبة، يوفر تشفيرًا ماديًا أصليًا، وعزل service/userland، ودعمًا كاملاً للبطاقات الذكية.

عرض المستودع
245منذ 6 أشهرتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة
الموقع الإلكتروني

SRO PKCS11 – SSH Agent CNG

Compatibility Memory Service Memory Agent Stability GitHub release

توحيد سيادي PKCS#11 + SSH-agent + Pageant + CNG/Smartcard

ملف تنفيذي واحد لنظام Windows يوحّد أربع وظائف كانت منفصلة تقليديًا:

  • وحدة PKCS#11 كاملة (Firefox, OpenSC, ssh -I)
  • وكيل SSH متوافق مع OpenSSH/Git/VS/WSL
  • خادم Pageant متوافق مع PuTTY/plink/pscp
  • منسق CNG/KSP آمن للبطاقات الذكية

جدول المحتويات

  1. الفلسفة
  2. الهندسة
  3. أنماط التشغيل
  4. التثبيت
  5. الإعداد
  6. البروتوكولات المدعومة
  7. إدارة رمز PIN
  8. الخلفية CNG
  9. الأمان
  10. التوافق
  11. تصدير المفاتيح العامة
  12. أيقونة الدرج
  13. دعم WSL2
  14. كشف التعارضات
  15. التبعيات
  16. القيود المعروفة
  17. خريطة الطريق

الفلسفة

سيادي. لا اعتماد على CRT. جميع عمليات الذاكرة تمر عبر RtlCopyMemory, RtlZeroMemory, RtlEqualMemory (FreeCRT.h). يونيكود في كل مكان (Win32 أصلي). لا malloc, memcpy, strlen, printf.

آمن. لا يتم تصدير المفاتيح الخاصة أبدًا. لا يمر أي رمز PIN. CNG/KSP تدير واجهة PIN الأصلية لنظام Windows. عزل صارم بين الخدمة ومساحة المستخدم عبر أنابيب (pipes) آمنة.

بسيط. ملف ثنائي واحد. لا مكتبات DLL خارجية. لا تضخم في السجل. تثبيت بسيط (regsvr32 أو -install).

متعدد الاستخدامات. دعم متزامن لـ PKCS#11 و SSH-agent و Pageant و WSL2 في نفس العملية.

---``` ┌──────────────────────────────────────────────────────────────┐ │ Clients (Git, VS, WSL, OpenSSH, PuTTY, Firefox) │ └────────────────────────┬─────────────────────────────────────┘ │ ┌───────────────┼───────────────┬─────────────────┐ │ │ │ │ SSH-agent Pageant (WM_COPYDATA) PKCS#11 WSL2 (TCP) │ │ │ │ v v v v ┌──────────────────────────────────────────────────────────────┐ │ Service Stub (session 0, SYSTEM) │ │ - Accepte connexions sur \.\pipe\openssh-ssh-agent │ │ - Crée pipe interne par client (GUID unique) │ │ - Lance helper userland avec token interactif │ │ - Forwarde messages sans manipuler de secrets │ └────────────────────────┬─────────────────────────────────────┘ │ lancé par le service v ┌──────────────────────────────────────────────────────────────┐ │ Helper Userland (session interactive) │ │ - Connecte au pipe interne │ │ - Décode protocole SSH-agent/Pageant │ │ - Invoque CNG/KSP pour signature │ │ - UI PIN native Windows (pas de relay) │ │ - Renvoie signature au service │ │ - Fenêtre Pageant cachée pour WM_COPYDATA │ │ - Listener TCP 127.0.0.1:10022 pour WSL2 │ │ - Tray icon avec menu contextuel │ └────────────────────────┬─────────────────────────────────────┘ │ v ┌──────────────────────────────────────────────────────────────┐ │ CNG/KSP Backend │ │ - NCryptSignHash avec PKCS#1/PSS padding │ │ - Enumération certificats Windows Store │ │ - Filtrage SmartCardOnly / AllowedKSP │ │ - Support RSA + ECDSA (P-256, P-384, P-521) │ │ - Support EdDSA (Ed25519, Ed448) │ │ - Support Brainpool (P256r1, P384r1, P512r1) │ │ - Cache clés + providers (4h timeout) │ └──────────────────────────────────────────────────────────────┘

root@kitploit:~
---

## أوضاع التنفيذ

### 1. وضع PKCS#11 (تلقائي)

يتم التحميل بواسطة:
- `ssh -I ssh-agent.exe user@host`
- Firefox (Security Devices → Load PKCS#11 Module)
- `pkcs11-tool --module ssh-agent.exe --list-objects`

يعرض النواتج القياسية لـ PKCS#11:
- `C_Initialize`, `C_Finalize`, `C_GetInfo`
- `C_GetSlotList`, `C_GetSlotInfo`, `C_GetTokenInfo`
- `C_GetMechanismList`, `C_GetMechanismInfo`
- `C_OpenSession`, `C_CloseSession`, `C_Login`, `C_Logout`
- `C_FindObjectsInit`, `C_FindObjects`, `C_FindObjectsFinal`
- `C_GetAttributeValue`
- `C_SignInit`, `C_Sign`
- `C_VerifyInit`, `C_Verify`
- `C_DecryptInit`, `C_Decrypt`
- `C_GenerateRandom`, `C_SeedRandom`

**الآليات المدعومة (14 إجمالاً):**
- `CKM_RSA_PKCS` (raw مع padding)
- `CKM_RSA_X_509` (raw بدون padding)
- `CKM_SHA1_RSA_PKCS` (ssh-rsa القديم)
- `CKM_SHA256_RSA_PKCS` (rsa-sha2-256)
- `CKM_SHA384_RSA_PKCS` (rsa-sha2-384)
- `CKM_SHA512_RSA_PKCS` (rsa-sha2-512)
- `CKM_SHA256_RSA_PKCS_PSS` (RSA-PSS SHA-256)
- `CKM_SHA384_RSA_PKCS_PSS` (RSA-PSS SHA-384)
- `CKM_SHA512_RSA_PKCS_PSS` (RSA-PSS SHA-512)
- `CKM_ECDSA` (raw)
- `CKM_ECDSA_SHA1` (قديم)
- `CKM_ECDSA_SHA256` (ecdsa-sha2-nistp256/384/521)
- `CKM_ECDSA_SHA384`
- `CKM_ECDSA_SHA512`

### 2. وضع الوكيل في مساحة المستخدم (مستقل)```bash
ssh-agent.exe
  • إنشاء الأنبوب \\.\pipe\openssh-ssh-agent في جلسة المستخدم
  • تنفيذ بروتوكول SSH-agent
  • دعم متعدد العملاء (حد أقصى 16 اتصالًا متزامنًا)
  • تشغيل خادم Pageant تلقائيًا
  • تشغيل مستمع WSL2 تلقائيًا (127.0.0.1:10022)
  • استخدام CNG/KSP مباشرة (بدون خدمة)
  • واجهة PIN في الجلسة الحالية
  • تخزين PIN مؤقت اختياري (قابل للتكوين)
  • أيقونة شريط المهام مع إحصائيات في الوقت الفعلي

متوافق مع :

  • Git for Windows (set SSH_AUTH_SOCK=\\.\pipe\openssh-ssh-agent)
  • Visual Studio
  • WSL (عبر npiperelay أو socat)
  • WSL2 (عبر TCP 127.0.0.1:10022)
  • OpenSSH for Windows
  • PuTTY, plink, pscp, psftp (عبر Pageant)

3. وضع الخدمة الفرعية (stub)```bash

ssh-agent.exe -install net start SROSSHAgentCNG

root@kitploit:~
- يعمل في جلسة 0 (SYSTEM)
- يقبل الاتصالات على أنبوب عمومي (pipe global)
- يُنشئ أنبوبًا داخليًا لكل عميل (مؤمن بواسطة SID)
- يُطلق مساعدًا في وضع المستخدم باستخدام `CreateProcessAsUserW`
- يُمرر الرسائل دون لمس الأسرار
- تجمّع مساعدين مع مهلة 4 ساعات (إعادة استخدام تلقائية)
- إزالة LRU إذا امتلأ التجمّع

**المزايا:**
- إدخال PIN للواجهة في جلسة المستخدم (وليس في الجلسة 0)
- متوافق مع البيئات المُشدّدة
- عزل صارم بين الخدمة والتشفير
- تعدد الإرسال متعدد المستخدمين

### 4. وضع المساعد المشفر في وضع المستخدم (userland)```bash
ssh-agent.exe -useragent -pipe \\.\pipe\ssh-ksp-helper-{GUID}

لانشأ تلقائيًا بواسطة الخدمة:

  • يتصل بالقناة الداخلية
  • يعالج طلبات SSH-agent/Pageant
  • يستدعي NCryptSignHash (واجهة PIN أصلية)
  • يعيد التوقيع إلى الخدمة
  • يشغل Pageant (نافذة مخفية)
  • يشغل مستمع WSL2 (127.0.0.1:10022)
  • يعرض أيقونة الدرج (وضع SERVICE)
  • ينتهي بعد انتهاء المهلة أو قطع الاتصال

تثبيت

التسجيل كوحدة PKCS#11```bash

regsvr32 ssh-agent.exe

root@kitploit:~
أنشئ المفاتيح:
- `HKLM\SOFTWARE\San@sro Inc\PKCS11-SSH-Agent`
- `HKCU\SOFTWARE\San@sro Inc\PKCS11-SSH-Agent`
- `HKCU\SOFTWARE\Mozilla\Firefox\PKCS11Modules\SROSSHAgent`

### تثبيت خدمة Windows```bash
ssh-agent.exe -install
net start SROSSHAgentCNG

تكوين WSL2

أضف إلى ~/.bashrc أو ~/.zshrc :```bash

--- Pont SSH Agent Windows (TCP -> Unix Socket) ---

export SSH_AUTH_SOCK="$HOME/.ssh/agent.sock"

Vérifier si le socket est déjà géré par un socat actif

if ! pgrep -u $USER socat > /dev/null || [ ! -S "$SSH_AUTH_SOCK" ]; then # Nettoyage préventif rm -f "$SSH_AUTH_SOCK"

root@kitploit:~
# Lancement du bridge en arrière-plan
# Note: Utiliser 127.0.0.1 si mode 'mirrored'
# sinon l'IP du host (ex: 192.168.99.x)
socat UNIX-LISTEN:"$SSH_AUTH_SOCK",fork,unlink-early \
      TCP:127.0.0.1:10022 > /dev/null 2>&1 &

fi

root@kitploit:~
### إلغاء التثبيت```bash
regsvr32 /u ssh-agent.exe
ssh-agent.exe -remove

الإعدادات

المفتاح: HKLM\SOFTWARE\San@sro Inc\pkcs11-cng أو HKCU\SOFTWARE\San@sro Inc\pkcs11-cng



مثال :``` StoreName = "MY" StoreLocation = "CurrentUser" SmartCardOnly = 1 AllowedKSP = "Microsoft Smart Card Key Storage Provider;YubiKey Smart Card Key Storage Provider" RelaxCheckMode = 0 LogLevel = 2

root@kitploit:~
---

## البروتوكولات المدعومة

### SSH-Agent

#### SSH2_AGENTC_REQUEST_IDENTITIES (11)

طلب :```
[type=11]

الرد :``` [type=12][count][key_blob_1][comment_1][key_blob_2][comment_2]...

root@kitploit:~
**key_blob RSA :**```
[len]["ssh-rsa"][len][exponent][len][modulus]

key_blob ECDSA :``` [len]["ecdsa-sha2-nistp256"][len]["nistp256"][len][point]

root@kitploit:~
**key_blob EdDSA :**```
[len]["ssh-ed25519"][len][point]

SSH2_AGENTC_SIGN_REQUEST (13)

طلب :``` [type=13][len][key_blob][len][data][flags]

root@kitploit:~
**الأعلام :**
- `0x00` : ssh-rsa (SHA-1, legacy)
- `0x02` : rsa-sha2-256
- `0x04` : rsa-sha2-512

الرد :```
[type=14][len][signature_blob]

signature_blob :``` [len]["rsa-sha2-256"][len][signature_data]

root@kitploit:~
### Pageant

متوافق مع PuTTY عبر `WM_COPYDATA` :

1. العميل ينشئ ذاكرة مشتركة عبر `CreateFileMapping`
2. يكتب طلب SSH-agent بالتنسيق القياسي
3. يرسل `WM_COPYDATA` إلى نافذة "Pageant"
4. يقرأ الرد من الذاكرة المشتركة

تنسيق الذاكرة المشتركة :```
[uint32 length][SSH-agent payload]

WSL2 الشبكة

مستمع TCP على 127.0.0.1:10022 :

  • يقبل متعدد العملاء (حد أقصى 16 اتصالاً)
  • بروتوكول SSH-agent القياسي عبر TCP
  • ربط localhost فقط (أمان)
  • خيط لكل اتصال
  • إعادة توجيه إلى handle_ssh_message()

إدارة PIN

يتولى Windows إدارة PIN بالكامل عبر CNG/KSP وبرنامج تشغيل البطاقة الذكية المصغر.

الوحدة لا تخزّن PIN أبداً ولا تراه أثناء العبور:

  • في الوضع المستقل: NCryptSignHash يُظهر واجهة PIN الأصلية
  • في وضع الخدمة: المساعد في وضع المستخدم (جلسة تفاعلية) يستدعي NCryptSignHash، وتظهر واجهة PIN في جلسة المستخدم
  • خدمة الـ stub لا تقوم إلا بـ إعادة توجيه شفافة (تمرير مباشر) بين الأنابيب

ذاكرة تخزين PIN المؤقتة: تُدار تلقائيًا بواسطة Windows/برنامج التشغيل المصغر (لا حاجة لذاكرة تخزين تطبيقية).

أعلام NCrypt :

  • ذاكرة تخزين PIN نشطة + إصابة : NCRYPT_SILENT_FLAG (لا تظهر واجهة)
  • ذاكرة تخزين PIN نشطة + خطأ : لا علم (تظهر واجهة)
  • ذاكرة تخزين PIN معطلة : لا علم (تظهر واجهة دائمًا)
  • إذا فشل SILENT_FLAG : إعادة محاولة تلقائية مع واجهة.

الواجهة الخلفية CNG

ذاكرة تخزين مؤقتة متعددة المستويات

ذاكرة تخزين المفاتيح المؤقتة (مهلة 4 ساعات):

  • مفهرسة ببصمة SHA-1
  • تخزّن CNG_KEY_INFO (مقبض، موفر، حاوية)
  • إزالة تلقائية عند انتهاء الصلاحية
  • تنظيف يدوي عبر أيقونة شريط المهام

ذاكرة تخزين المزوّدين المؤقتة (مهلة 4 ساعات):

  • مفهرسة باسم KSP
  • تخزّن NCRYPT_PROV_HANDLE
  • تتجنب الاستدعاءات المتكررة لـ NCryptOpenStorageProvider

تعداد الشهادات```c

cng_store_enum_certificates(cfg, callback, user_data);

root@kitploit:~
المرشح:
- المفاتيح الخاصة المتاحة
- موفرو خدمة المفاتيح المعتمدون (إذا كان `SmartCardOnly`)
- المفاتيح غير القابلة للتصدير (إذا كان `SmartCardOnly`)

### التوقيع```c
cng_sign_hash(key_info, mechanism, hash, hash_len, signature, &sig_len);

الآلية → الحشو:

  • CKM_RSA_PKCS → BCRYPT_PAD_PKCS1
  • CKM_SHA256_RSA_PKCS → BCRYPT_PAD_PKCS1 + BCRYPT_SHA256_ALGORITHM
  • CKM_SHA256_RSA_PKCS_PSS → BCRYPT_PAD_PSS + حجم الملح = حجم التجزئة
  • CKM_ECDSA_SHA256 → بدون حشو (توقيع خام)

ترميز المفاتيح العمومية

RSA :```c cng_cert_get_public_key(cert, modulus, &mod_len, exponent, &exp_len);

root@kitploit:~
**ECDSA :**```c
cng_cert_get_ec_params(cert, params, &params_len);  // OID courbe
cng_cert_get_ec_point(cert, point, &point_len);     // Point public

المنحنيات المدعومة:

  • NIST: nistp256 (OID: 1.2.840.10045.3.1.7), nistp384 (1.3.132.0.34), nistp521 (1.3.132.0.35)
  • Brainpool: brainpoolP256r1, brainpoolP384r1, brainpoolP512r1
  • EdDSA: ed25519 (OID: 1.3.101.112), ed448 (1.3.101.113)

استخراج UPN

يدعم مصادقة Active Directory :```c cng_extract_upn_from_certificate(cert, upn, upn_size);

root@kitploit:~
استخراج الامتداد `szOID_NT_PRINCIPAL_NAME` لاستخدامه كتعليق SSH.

---

## الأمان

### المفاتيح الخاصة

**لم يتم تصديرها أبدًا.** يتم تفويض جميع العمليات التشفيرية إلى CNG/KSP. يتم استدعاء `NCryptSignHash` مع مقبض المفتاح، وليس مع المفتاح نفسه.

### رمز PIN

**تتم إدارته حصريًا بواسطة Windows (CNG/KSP/minidriver).**

الوحدة **لا تخزن رمز PIN مطلقًا** و **لا تراه أثناء النقل** :
- لا يتم نقل رمز PIN أبدًا إلى وحدة PKCS#11
- يتم عرض واجهة PIN بواسطة برنامج تشغيل البطاقة الذكية المصغر
- يتم إدارة ذاكرة التخزين المؤقت لرمز PIN تلقائيًا بواسطة Windows/minidriver
- في وضع الخدمة: يتلقى المساعد في مساحة المستخدم (جلسة تفاعلية) واجهة PIN

**وضع الخدمة (تمرير خالص) :**
يقوم كعب الخدمة بعمل تمرير شفاف فقط:
- العميل ← الخدمة ← المساعد (تمرير رسالة وكيل SSH)
- المساعد ← الخدمة ← العميل (تمرير رد وكيل SSH)
- لا تقوم الخدمة بتحليل المحتوى مطلقًا
- لا ترى الخدمة أبدًا: رمز PIN، التجزئة، التوقيع، المفتاح

### عزل الخدمة ↔ مساحة المستخدم

**أنابيب آمنة.** كل أنبوب داخلي:
- يتم إنشاؤه باستخدام GUID فريد
- يتم إنشاؤه باستخدام `FILE_FLAG_FIRST_PIPE_INSTANCE`
- قائمة التحكم بالوصول التمييزية (DACL) تسمح فقط للمستخدم الحالي

يقوم المساعد في مساحة المستخدم باستدعاء CNG/KSP في الجلسة التفاعلية ← واجهة PIN أصلية.

### التدقيق

**سجلات Unicode.** يتم تسجيل جميع الأحداث عبر `utils_log()`:
- اتصالات العميل
- تعداد المفاتيح
- طلبات التوقيع
- أخطاء CNG/KSP
- تعارضات الوكلاء

**الموقع:** OutputDebugString + ملف اختياري (`utils_set_log_file()`).

---

## التوافق

| البيئة                | الوضع                   | الحالة |
|------------------------------|------------------------|--------|
| OpenSSH for Windows          | Standalone / Service   | ✓      |
| Git for Windows              | Standalone / Service   | ✓      |
| Visual Studio                | Standalone / Service   | ✓      |
| WSL (npiperelay)             | Standalone / Service   | ✓      |
| WSL2 (TCP)                   | Standalone / Service   | ✓      |
| PuTTY / plink / pscp         | Pageant                | ✓      |
| Firefox                      | PKCS#11                | ✓      |
| OpenSC / pkcs11-tool         | PKCS#11                | ✓      |
| ssh -I (OpenSSH)             | PKCS#11                | ✓      |
| البيئات المحصنة        | Service stub           | ✓      |
| البطاقة الذكية GIDS               | CNG/KSP                | ✓      |
| البطاقة الذكية PIV                | CNG/KSP                | ✓      |
| YubiKey                      | CNG/KSP                | ✓      |
| Nitrokey                     | CNG/KSP                | ✓      |

---

## تصدير المفاتيح العامة

### أمر CLI```bash
ssh-agent.exe -exportkey [output.pub]

حوار تفاعلي

  1. يفتح CryptUIDlgSelectCertificateFromStore
  2. يعرض جميع الشهادات مع المفاتيح الخاصة
  3. يسمح بالاختيار البصري
  4. يستخرج المفتاح العام (RSA/ECDSA/EdDSA)
  5. يشفر إلى تنسيق SSH wire
  6. ينتج تنسيقين:
    • OpenSSH (authorized_keys)
    • RFC4716 (SSH2 Public Key)

تنسيقات الإخراج

OpenSSH :``` ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC5... [email protected]

root@kitploit:~
**RFC4716 :**```
---- BEGIN SSH2 PUBLIC KEY ----
Comment: "[email protected]"
AAAAB3NzaC1yc2EAAAADAQABAAABAQC5ABCDEF...
---- END SSH2 PUBLIC KEY ----

دعم المنحنيات

  • RSA (جميع الأحجام)
  • ECDSA NIST (P-256, P-384, P-521)
  • ECDSA Brainpool (P256r1, P384r1, P512r1)
  • EdDSA (Ed25519, Ed448)

استخراج الهوية

ترتيب الأولوية للتعليق:

  1. UPN (szOID_NT_PRINCIPAL_NAME)
  2. CN (الاسم الشائع)
  3. موضوع DN كامل

أيقونة العلبة

أوضاع العرض

TRAY_MODE_USERLAND (أخضر) :

  • الوكيل المستقل نشط
  • تلميح: "SRO SSH-Agent (Userland)"

TRAY_MODE_SERVICE (أزرق) :

  • المساعد الذي يشغله الخدمة
  • تلميح: "SRO SSH-Agent (Service Helper)"

إحصائيات الوقت الفعلي

تلميح ديناميكي:``` SRO SSH-Agent (Userland) 12 keys, 3 clients

root@kitploit:~
تحديث:
- كل 5 ثوانٍ
- عند كل اتصال/فصل عميل
- عند مسح الذاكرة المخبأة

### القائمة السياقية

**Show Keys...** : حوار يسرد جميع المفاتيح المتاحة```
═══════════════════════════════════════════════
  SRO SSH-Agent - Available Keys
═══════════════════════════════════════════════

[01] RSA-2048 - [email protected]
[02] ECDSA-nistp256 - [email protected]
[03] EdDSA-Ed25519 - [email protected]

═══════════════════════════════════════════════
Total: 3 keys

💡 Tip: Use 'Export Public Key' to copy SSH format

تصدير المفتاح العام... : يفتح مربع حوار التحديد وينسخ إلى الحافظة

مسح وإعادة تحميل المفاتيح : يمسح ذاكرة التخزين المؤقت للمفاتيح/الموفرين ويعيد التحميل

الإعدادات... : يعرض الإعدادات الحالية``` Current Configuration:

Store Name: MY Store Location: CurrentUser SmartCard Only: Yes Relax Key Usage Check Mode: No Log Level: 2

Edit registry to change: HKLM\SOFTWARE\San@sro Inc\pkcs11-cng

root@kitploit:~
**Exit**: إيقاف نظيف (يشير إلى `g_shutdown_event`)

### مؤشر ترابط واجهة المستخدم المخصص

- نافذة مخفية مع مضخة الرسائل
- حلقة `GetMessage/DispatchMessage`
- حدث `g_tray_ready_event` للمزامنة
- تنظيف تلقائي (`Shell_NotifyIcon(NIM_DELETE)`)

---

## دعم WSL2

### البنية```
┌─────────────────────────────────────────────┐
│  WSL2 (Linux)                               │
│  - socat UNIX-LISTEN → TCP:127.0.0.1:10022 │
└─────────────────────────────────────────────┘
                    │
                    │ TCP
                    v
┌─────────────────────────────────────────────┐
│  Windows Host                               │
│  - ssh-agent.exe (listener 127.0.0.1:10022)│
│  - CNG/KSP → Smartcard                     │
└─────────────────────────────────────────────┘

مستمع TCP

الأمان:

  • خيط مستقبل مع إيقاف تشغيل تفاعلي
  • خيط لكل عميل (الحد الأقصى 16)
  • مهلة الاتصال: ثانية واحدة

مجموعة العملاء

  • مصفوفة ثابتة g_wsl2_clients[16]
  • CRITICAL_SECTION لكل فتحة
  • إخلاء LRU إذا كانت المجموعة ممتلئة
  • تنظيف تلقائي عند الإيقاف

تكوين WSL2

الوضع المتطابق (Windows 11 22H2+):```bash socat UNIX-LISTEN:"$SSH_AUTH_SOCK",fork,unlink-early
TCP:127.0.0.1:10022 > /dev/null 2>&1 &

root@kitploit:~
**وضع NAT الكلاسيكي :**```bash
# Récupérer l'IP du host Windows
HOST_IP=$(ip route | grep default | awk '{print $3}')

socat UNIX-LISTEN:"$SSH_AUTH_SOCK",fork,unlink-early \
      TCP:$HOST_IP:10022 > /dev/null 2>&1 &

الدوال العامة```c

BOOL wsl2_network_start(WORD port, HANDLE shutdown_event); void wsl2_network_stop(void); BOOL wsl2_network_is_running(void); DWORD wsl2_network_get_client_count(void);

root@kitploit:~
---

## كشف النزاعات

### العوامل المكتشفة```c
typedef enum {
    AGENT_NONE = 0,
    AGENT_OPENSSH_NATIVE,    // OpenSSH for Windows (ssh-agent.exe)
    AGENT_PAGEANT,           // PuTTY Pageant (fenêtre "Pageant")
    AGENT_SRO_USERLAND,      // SRO SSH-Agent userland
    AGENT_SRO_SERVICE,       // SRO SSH-Agent service Windows
    AGENT_UNKNOWN            // Agent inconnu détecté
} AGENT_TYPE;

طرق الكشف

OpenSSH الأصلي:

  • البحث عن عملية ssh-agent.exe عبر CreateToolhelp32Snapshot
  • التحقق من أنها ليست العملية الحالية

Pageant:

  • البحث عن نافذة FindWindowW(L"Pageant", L"Pageant")
  • التحقق من أنها ليست نافذة العملية الحالية

SRO Userland:

  • محاولة CreateFileW(\\.\pipe\openssh-ssh-agent)
  • في حال النجاح: يوجد وكيل يستمع بالفعل

SRO Service:

  • استعلام SCM OpenServiceW(L"SROSSHAgentCNG")
  • التحقق من الحالة SERVICE_RUNNING

حوار الحل

يظهر عند بدء التشغيل إذا تم اكتشاف تعارض:``` ⚠ SSH Agent Conflict Detected

The following SSH agents are already running: • OpenSSH Native (ssh-agent.exe) • PuTTY Pageant

Running multiple agents may cause conflicts.

Do you want to continue anyway?

[Continue] [Stop conflicting agents] [Exit]

root@kitploit:~
**الإجراءات:**
- **متابعة**: يشغّل رغم ذلك (خطر تعارض)
- **إيقاف**: يحاول إيقاف الوكلاء (إن أمكن)
- **خروج**: يخرج دون تشغيل

### الوظيفة العامة```c
BOOL detect_running_agents(AGENT_TYPE* detected_agents, DWORD* count);
BOOL show_agent_conflict_dialog(const AGENT_TYPE* agents, DWORD count);
const WCHAR* agent_type_to_string(AGENT_TYPE agent);

التبعيات

لا شيء. الملف الثنائي مكتفي ذاتيًا ولا يُحمّل سوى ملفات DLL للنظام:

  • kernel32.dll (موجود دائمًا)
  • advapi32.dll (السجل، مدير التحكم بالخدمات)
  • crypt32.dll (الشهادات)
  • ncrypt.dll (CNG)
  • bcrypt.dll (التجزئة)
  • wtsapi32.dll (الجلسات)
  • shell32.dll (أيقونة شريط المهام)
  • ws2_32.dll (Winsock)
  • cryptui.dll (حوار اختيار الشهادة)

لا يوجد CRT. جميع عمليات الذاكرة عبر RtlCopyMemory، RtlZeroMemory، RtlEqualMemory.


القيود المعروفة

  • لا تشفير. SSH-agent ينفذ التوقيع فقط (ليس SSH2_AGENTC_*_ENCRYPT).
  • لا قيود على المفاتيح. لم يتم تنفيذ SSH2_AGENTC_ADD_ID_CONSTRAINED.
  • ذاكرة تخزين مؤقت لـ PIN في CNG. تتم إدارتها بواسطة Windows/minidriver، ولا يوجد تحكم دقيق من التطبيق.
  • عدد محدود من مساعدي التجمّع. حد أقصى 16 مساعدًا في وضع الخدمة (قابل للتكوين عبر MAX_HELPERS).
  • شهادة YubiKey PIV ذاتية التوقيع. تُنشئ مفاتيح YubiKey في وضع PIV شهادات ذاتية التوقيع لا تلتزم بحقول EKU/KeyUsage القياسية. فعّل RelaxCheckMode = 1 لاستخدامها.

خارطة الطريق

  • PKCS#11 كامل (14 آلية)
  • SSH-agent متعدد العملاء
  • متوافق مع Pageant (PuTTY)
  • مستمع TCP لـ WSL2
  • Stub خدمة Windows
  • أيقونة شريط مهام مع إحصائيات
  • تصدير المفاتيح العامة (OpenSSH + RFC4716)
  • كشف تعارض الوكلاء
  • ذاكرة تخزين مؤقت للمفاتيح/المزوّدين (مهلة 4 ساعات)
  • دعم EdDSA (Ed25519، Ed448)
  • دمج Brainpool
  • واجهة رسومية للإعدادات (محرر تسجيل مبسّط)
  • مقاييس ومراقبة (عدادات التوقيع)
  • تصدير الإعدادات بصيغة JSON

المساهمة

المساهمات مرحب بها! يُرجى:

  • الالتزام بالهندسة السيادية (لا CRT)
  • استخدام واجهة Win32 API فقط
  • توثيق الدوال العامة
  • الاختبار باستخدام البطاقات الذكية الحقيقية
  • اتباع نمط الشيفرة الحالي

الملكية والترخيص

هذا البرنامج مملوك لشركة San@sro inc.
ويُوزّع وفق نموذج ترخيص الثقة:

• الاستخدام الشخصي والتعليمي: مجاني ومُشجّع.
• الاستخدام المهني / التجاري: يتطلب شراء ترخيص السلام التقني.
الاستخدام في الشركات دون ترخيص صالح يُشكّل انتهاكًا لحقوق النشر، رغم الغياب المتعمّد لأي قفل تقني.

إعادة التوزيع

يُسمح بإعادة التوزيع بشرط: • بقاء الملف الثنائي سليمًا،
• الحفاظ على التوقيع Authenticode الأصلي.

الضمان

هذا البرنامج مُقدَّم "كما هو"، دون أي ضمان من أي نوع.

الترخيص الكامل (بالفرنسية + الإنجليزية)، بما في ذلك التعريفات، شروط إعادة التوزيع، المدة، الإنهاء، وكيفية الحصول على ترخيص السلام التقني، متاح هنا:

👉 LICENSE.md

للاستفسارات حول التراخيص المهنية:
📧 [email protected]


الأمن والإفصاح المسؤول

لا يتعامل SRO PKCS11 – SSH Agent CNG مع أي معلومات حساسة:
إدارة PIN والمفاتيح الخاصة والعمليات التشفيرية تتم بالكامل بواسطة Windows (CNG/KSP/minidriver).

للإبلاغ عن خطأ، سلوك غير طبيعي، أو ثغرة محتملة، هناك سياسة إفصاح مسؤول متاحة هنا:

👉 SECURITY.md

جهة الاتصال الأمنية:
📧 [email protected]


SRO PKCS11 – SSH Agent CNG
سيادي. متين. عملي.
ملف ثنائي واحد يفعل كل شيء.

تنزيل الأداة
القيمةالنوعالوصف
StoreNameREG_SZ"MY"، "Root"، إلخ. (الافتراضي: "MY")
StoreLocationREG_SZ"CurrentUser" أو "LocalMachine"
ModeREG_SZ"All" أو "SmartCard"
SmartCardOnlyREG_DWORD1 = تصفية البطاقات الذكية فقط
AllowedKSPREG_SZقائمة KSP المسموح بها (مفصولة بـ ";")
RelaxCheckModeREG_DWORD1 = تعطيل التحقق من EKU/KeyUsage/التواريخ (YubiKey PIV الموقّع ذاتيًا)
LogLevelREG_DWORD0=إيقاف، 1=خطأ، 2=معلومات، 3=تصحيح