
FARO - كاشف حساسية المستندات

FARO هي أداة لكشف المعلومات الحساسة في المستندات داخل المؤسسة. وهي موجّهة للاستخدام من قبل الشركات الصغيرة والأفراد الذين يرغبون في تتبع مستنداتهم الحساسة داخل مؤسساتهم ولكنهم لا يستطيعون قضاء الكثير من الوقت والمال في إعداد أدوات حماية بيانات معقدة.
يستخرج FARO مؤشرات الحساسية من المستندات (مثل معرّفات المستندات، الكميات النقدية، رسائل البريد الإلكتروني الشخصية) ويمنح المستند درجة حساسية (من منخفضة إلى عالية) باستخدام تواتر ونوع المؤشرات في المستند.
حاليًا، جميع وظائف هذه الأداة مخصصة للمستندات المكتوبة باللغة الإسبانية، على الرغم من أنه يمكن ترقيتها بسهولة لتغطية المزيد من اللغات.
هذه الأداة مطوّرة من قبل TEGRA R&D Cybersecurity Center.
يحتوي المشروع على المجلدات التالية:
faro/: هذه هي وحدة FARO مع الوظيفة الرئيسية.config/: ملفات إعداد yaml توضع هنا. يوجد ملف yaml واحد لكل لغة (بالإضافة إلى ملف nolanguage.yaml لتوفير وظيفة أساسية للغات غير المكتشفة) وملف yaml واحد بإعدادات مشتركة لجميع اللغات config/commons.yaml.models/: هذا هو المجلد المخصص لوضع نماذج FARO.faro_detection.py: مشغّل FARO للتشغيل المستقل على ملف واحد.faro_spider.sh: برنامج نصي للمعالجة بالجملة.docker_build_faro.sh: برنامج نصي لبناء صورة FARO على Docker في Linux و Mac OS.docker_build_faro.bat: برنامج نصي لبناء صورة FARO على Docker في Windows.docker_run_faro.sh: برنامج نصي لتشغيل حاوية FARO على Linux و Mac OS.docker_run_faro.bat: برنامج نصي لتشغيل حاوية FARO على Windows.CHANGELOG: سجل تغييرات FARO.يمكن تشغيل FARO كحاوية مستقلة باستخدام Docker. يمكنك بناء الصورة بنفسك أو الحصول عليها من مستودع Docker Hub.
بشرط أن يكون Docker مثبتًا وقيد التشغيل على نظامك، نفّذ الأمر التالي للحصول على أحدث صورة FARO من Docker Hub.
docker pull gradiant/faro
لتشغيل صورة docker استخدم البرامج النصية docker_run_faro.sh (Linux/Mac OS) أو docker_run_faro.bat (Windows). يمكنك العثور عليها في جذر المشروع أو في الإصدار الأحدث.
بشرط أن يكون Docker مثبتًا وقيد التشغيل على نظامك، قم بما يلي لبناء صورة FARO.
Linux و Mac OS
./docker_build_faro.sh
Windows
docker_build_faro.bat
لتشغيل حاوية FARO، يتم توفير بعض البرامج النصية في جذر المشروع. يمكنك نسخ واستخدام هذه البرامج النصية من أي مكان آخر للراحة. سيتم إنشاء مجلد "output" داخل دليلك الحالي.
Linux و Mac OS
./docker_run_faro.sh <your folder with files>
Windows
docker_run_faro.bat <your folder with files>
لقد أضفنا دعم OCR إلى tika من خلال تكامله مع tesseract. يمكن تخصيص بعض إعدادات عملية OCR من خلال استخدام ملف env يجب توفير مساره كوسيط ثانٍ للبرنامج النصي. لقد قدمنا مثالًا مشروحًا ليكون قالبًا هنا
./docker_run_faro.sh <your folder with files> <path to env file>
على سبيل المثال:
./docker_run_faro.sh ../data docker_faro_env_example.list
ينشئ FARO مجلد "output" داخل المجلد الحالي ويخزّن نتائج التنفيذ في ملفين:
output/scan.$CURRENT_TIME.csv: هو ملف csv يحتوي على الدرجة المعطاة للمستند وتواتر المؤشرات في كل ملف.filepath,score,person_position_organization,monetary_quantity,signature,personal_email,mobile_phone_number,financial_data,document_id,custom_words,meta:content-type,meta:author,meta:pages,meta:lang,meta:date,meta:filesize,meta:num_words,meta:num_chars,meta:ocr
/Users/test/code/FARO_datasets/quick_test_data/Factura_NRU_0_1_001.pdf,high,0,0,0,0,0,0,1,4,application/pdf,Powered By Crystal,1,es,,85739,219,1185,False
/Users/test/code/FARO_datasets/quick_test_data/Factura_Plancha.pdf,high,0,6,0,0,0,0,2,8,application/pdf,Python PDF Library - http://pybrary.net/pyPdf/,1,es,,77171,259,1524,True
/Users/test/code/FARO_datasets/quick_test_data/20190912-FS2019.pdf,high,0,3,0,0,0,0,1,2,application/pdf,FPDF 1.6,1,es,2019-09-12T20:08:19Z,1545,62,648,False
output/scan.$CURRENT_TIME.entity: هو ملف json يحتوي على قائمة المؤشرات (المفصّلة) المستخرجة من ملف. على سبيل المثال:{"filepath": "/Users/test/code/FARO_datasets/quick_test_data/Factura_NRU_0_1_001.pdf", "entities": {"custom_words": {"facturar": 3, "total": 1}, "prob_currency": {"12,0021": 1, "12,00": 1, "9,92": 1, "3,9921": 1, "3,99": 1, "3,30": 1, "15,99": 1, "13,21": 1, "1.106.166": 1, "1,00": 1, "99,00": 1}, "document_id": {"89821284M": 1}}, "datetime": "2019-12-11 14:19:17"}
{"filepath": "/Users/test/code/FARO_datasets/quick_test_data/Factura_Plancha.pdf", "entities": {"document_id": {"H82547761": 1, "21809943D": 2}, "custom_words": {"factura": 2, "facturar": 2, "total": 2, "importe": 2}, "monetary_quantity": {"156,20": 4, "2,84": 2, "0,00": 2, "159,04": 2, "32,80": 4, "191,84": 2}, "prob_currency": {"1,00": 6, "189,00": 2}}, "datetime": "2019-12-11 14:19:27"}
{"filepath": "/Users/test/code/FARO_datasets/quick_test_data/20190912-FS2019.pdf", "entities": {"document_id": {"C-01107564": 1}, "custom_words": {"factura": 1, "total": 1}, "monetary_quantity": {"3,06": 1, "0,64": 1, "3,70": 1}}, "datetime": "2019-12-11 14:19:33"}
ملاحظة: فقط LINUX و MAC OS X
يتطلب هذا الوضع بعض متطلبات نظام التشغيل والمكتبات لكي يعمل بشكل صحيح
يُنصح باستخدام بيئة افتراضية منفصلة. لإنشاء بيئة افتراضية باستخدام virtualenv.
virtualenv -p `which python3` <yourenvname>
لتفعيل البيئة الافتراضية على الطرفية اكتب فقط:
source <yourenvname>/bin/activate
أسهل طريقة لتشغيل النظام هي تثبيت التبعيات بهذه الطريقة
pip install -r requirements.txt
قائمة التبعيات هي التالية:
هذه التبعيات الأخرى تُستخدم للاختبار:
يعتمد FARO على عدة نماذج تعلم آلي لكي يعمل.
detection:
nlp_model : es_core_news_sm
crf_ner_list: models/crf_professions_v1.joblib
personal_email_detection: models/email_detector.joblib
target_list: models/legal.txt
crf_ner_classic: models/crf_classic_step1.joblib,models/crf_classic_step2.joblib,models/crf_classic_step3.joblib,models/crf_classic_step4.joblib,models/crf_classic_step5.joblib
corp_mail_list: models/corp_mail_list.txt
في مستودعنا، نتعامل مع النماذج من خلال Git LFS بسبب حجمها. إذا كان لديك git-lfs مثبتًا، فيجب أن تحصل تلقائيًا على النماذج التي تم تنزيلها عند استنساخ مستودعنا لأول مرة.
إذا كنت تريد تنزيل النماذج يدويًا، نفّذ الأمر التالي من جذر المشروع.
git lfs pull
تحقق من أن المسارات الموضحة أدناه داخل ملف config/es.yml تشير إلى النماذج.
البرنامج النصي spider خاصتنا هو برنامج نصي لتحليل المستندات داخل مجلد بشكل متكرر، مع تخزين نتائج التحليل في ملف.
./faro_spider.sh <your folder with files>
بعد إضافة OCR، توجد بعض الإعدادات التي يمكن تخصيصها لتنفيذ FARO من خلال متغيرات البيئة:
FARO_DISABLE_OCR: إذا تم العثور على هذا المتغير (بأي قيمة)، فلن ينفذ FARO OCR على المستنداتFARO_REQUESTS_TIMEOUT: عدد الثواني قبل أن يحدث انتهاء مهلة في FARO إذا لم يستجب خادم tika (الافتراضي: 60)FARO_PDF_OCR_RATIO: البايتات لكل حرف المستخدمة في مستندات PDF المختلطة (نص وصور) لفرض OCR (الافتراضي: 150 بايت/حرف)يمكن أيضًا إعداد تسجيل السجلات من خلال متغيرات البيئة:
FARO_LOG_LEVEL: مستوى تسجيل Faro (الافتراضي: INFO)FARO_LOG_FILE: ملف تسجيل Faro (الافتراضي: None). عند استخدام docker، تأكد من تعيينه داخل مجلد output للحفاظ عليه على الجهاز المضيف.يمكنك تنفيذ كشف FARO على ملف واحد باستخدام البرنامج النصي faro_detection.py
./faro_detection.py -i <your_file>
يتم إنشاء ملفي مخرجات بالمسارات <your_file>.entity و <your_file>.score.
أ) <your_file>.entity: ملف json بقائمة الكيانات مرتبة حسب نوعها وعدد مرات الظهور (مخرجات وحدة كشف الكيانات):
{"LOC": {"Pontevedra": 1}, "MONEY": {"1.000 euros": 2}, "PER": {"Betty Corti\u00f1as": 1, "Eva Expósito": 1, "Belén Portela": 1, "Marta Rivadulla": 1, "Miguel Rivas": 1}, "PROF": {"el tutor": 1}, "ORG": {"Centro de Recursos Educativos": 1}}
ب) <your_file>.score: ملف json بأنواع الكيانات وعدد مرات ظهور هذا النوع من الكيانات في النص. يحتوي هذا json أيضًا على درجة الحساسية في الخاصية "score" (يمكن أن تكون "low" و "medium" و "high").
{"score": "high", "summary": {"monetary_quantity": 1, "person_position": 1, "mobile_phone_number": 1, "personal_email": 1, "credit_account_number": 2}}
للحصول على معلومات حول الوسائط الإضافية التي يمكن تمريرها إلى برنامج الكشف الخاص بنا، ألقِ نظرة هنا.
يقوم كاشف كيانات FARO بخطوتين:
قائمة المؤشرات هي التالية:
person_position_organization: هذه مجموعة من الكيانات (شخص، وظيفة - منصب، منظمة) التي تم استخراجها وربطها معًا من المستندات.
monetary_quantity: كمية نقدية (حاليًا يتم دعم اليورو والدولار فقط).
signature: يُخرج الشخص الذي يوقّع المستند
personal_email: رسائل البريد الإلكتروني غير المؤسسية (مثل info@ rrhh@)
mobile_phone_number: أرقام الهواتف المحمولة (مع استبعاد غير المحمولة منها)
financial_data: بطاقات الائتمان وأرقام حسابات IBAN
document_id: NIF و CIF الإسبانية.
يتم تجميع العدادات الفريدة لهذه الجمل في كائن json وإرسالها كمدخلات إلى الخطوة التالية.
يتم تطبيق القواعد التالية:
يضع كل مستوى حساسية عتبات لمؤشرات الحساسية. يجب أن يفي المستند بواحد على الأقل من العتبات (الحد الأدنى والحد الأقصى) للحصول على تلك الدرجة.
إذا ظهرت عتبات حساسية مختلفة في المستند (مُعدّة حاليًا على ثلاثة)، يرتفع مستوى حساسية المستند حتى لو استوفى جميع العتبات لهذا المستوى.
يتم أيضًا تعيين درجة "low" للمستندات التي لم يتم العثور على أي مؤشر حساسية فيها
يستخدم مجموعة ملفات YAML لإعداد وظائفه (توجد ملفات YAML داخل مجلد "config")
common.yaml: يحتوي على الوظيفة المشتركة لكل لغة
.yaml: يحتوي على الإعداد المحدد للغة (حاليًا يتم دعم الإسبانية فقط: كود "es"). يشير أيضًا إلى مكان وجود نماذج ML (على سبيل المثال، افتراضيًا داخل مجلد "models")
تلك مجموعة من الشروط التي تختار درجة ما وفقًا لمواصفات ملف الإعداد. يتم إعداد المستويات في sensitivity_list مرتبة حسب شدتها (من الأقل إلى الأكثر حساسية). يحتوي قاموس sensitivity على الشروط (min, max) مرتبة حسب نوع الكيان. يحتاج النظام فقط إلى استيفاء شرط واحد من مستوى معين لتمييز المستند بهذا المستوى من الحساسية. علاوة على ذلك، إذا تم العثور على عدة مؤشرات أداء لمستوى معين في المستند (كما هو محدد بواسطة معامل sensitivity_multiple_kpis)، يرفع النظام مستوى حساسيتها (على سبيل المثال من medium إلى high).
sensitivity_list:
- low
- medium
- high
sensitivity_multiple_kpis: 3
sensitivity:
low:
person_position:
min: 1
max: 5
monetary_quantity:
min: 1
max: 5
signature:
min: 0
max: 0
personal_email:
min: 0
max: 0
....
sensitivity_list هي قائمة درجات الحساسية المختلفة مرتبة حسب الشدة.
sensitivity_multiple_kpis يشير هذا الرقم إلى العدد المتزامن من الدرجات في مستوى ما المسموح به قبل رفع درجة الحساسية
sensitivity هو قاموس بشروط الحساسية التي يجب استيفاؤها للوصول إلى مستوى حساسية معين.
يستخدم تطبيق FARO Tika لمعالجة المستندات. لذلك، يمكن استخدام جميع الصيغ التي يعالجها Tika كمدخلات. ومع ذلك، فإن البرنامجين النصيين faro_spider.sh/faro_spider.bat للمعالجة بالجملة مقيدان بالامتدادات التالية: .doc، .docx، .pptx، .ppt، .xls، .pdf، .odt، .ods، .odp، .txt و .rtf.
يستخدم FARO NER (المبنية باستخدام CRFs) لاستخراج الكيانات الكلاسيكية (شخص، منظمة، موقع) والمناصب الوظيفية.
يتم استخراج المؤشرات الأخرى باستخدام RegExp (معرّفات المستندات، أرقام الهاتف وبطاقات الائتمان، إلخ).
يتم استخراج رسائل البريد باستخدام RegExp. يُستخدم مصنف تعلم آلي وطرق استدلالية للتمييز بين رسائل البريد المؤسسية والشخصية.
لدى FARO عدة اختبارات للتحقق من وظائف النظام (حاليًا تغطي الاختبارات التعبيرات النمطية فقط). يمكن تنفيذ الاختبارات بالأمر التالي:
python test_suite.py
--dump: يقوم النظام بإلقاء معلومات ملف <your_file>.score إلى stdout بصيغة csv. على سبيل المثال، قد يكون مثال الإخراج:
id_file,score,person_jobposition_organization,monetary_quantity,sign,personal_email,mobile_phone_number,credit_account_number,id_document
data/test/test2.pdf,medium,3,0,1,0,0,0,0
يمكن تعيين مسارات ملفات الإخراج صراحةً في سطر الأوامر باستخدام --output_entity_file و --output_score_file
python faro_detection.py --input_file <your_file> --output_entity_file <path to output> --output_score_file <path to output>
السلوك الافتراضي لبرنامج الكشف الخاص بنا هو إظهار نوع الكيانات التي تؤثر مباشرة على درجة الحساسية فقط. لإظهار جميع الكيانات المكتشفة، استخدم المعامل --verbose في سطر الأوامر.
يوجد معامل إضافي (--split_lines) يجب استخدامه مع المستندات التي يكون فيها كل سطر من المستند جملة (أو فقرة). افتراضيًا، يحاول FARO دمج الأسطر في المستند لأنه في كثير من الحالات لا يعني السطر المختلف جملة مختلفة (على سبيل المثال في ملفات PDF).
اتبع التعليمات لتثبيت git-lfs (تخزين ملفات GIT الكبيرة) اعتمادًا على
نزّل الحزمة من https://git-lfs.github.com/ واتبع تعليمات التثبيت.
ثبّت "git bash" على Windows (راجع قسم Windows في هذا الرابط https://git-scm.com/downloads) ثم قم بزيارة https://git-lfs.github.com/ واتبع تعليمات التثبيت.
brew install git-lfs
git lfs install
سيتم إنشاء مجلد models يحتوي على جميع النماذج بداخله.
الوظيفة الكاملة تعمل فقط مع المستندات الإسبانية على الرغم من أنه يمكن توسيعها بسهولة مع لغات جديدة (خاصة إذا كانت مدعومة بـ SpaCy، أداة معالجة اللغة الطبيعية المستخدمة لمعالجة الجمل والمستندات).
يستخدم النظام SpaCy لتحليل الجمل والمعالجة المسبقة لأجزاء الكلام. على الرغم من أن SpaCy يوفر نظام NER مُدرَّبًا للكيانات الكلاسيكية، إلا أنه يتم استخدام NER مخصصة لاستخراج الكيانات الكلاسيكية (شخص، منظمة، موقع) والمهن/المناصب الوظيفية.
TEGRA هو مركز أبحاث وتطوير في مجال الأمن السيبراني مقره في غاليسيا (إسبانيا). وهو جهد مشترك بين Telefónica، شركة اتصالات دولية رائدة، عبر ElevenPaths، وحدتها العالمية للأمن السيبراني، و Gradiant، مركز أبحاث وتطوير في تكنولوجيا المعلومات والاتصالات يضم أكثر من 100 متخصص يعملون في مجالات مثل الاتصال والأمن والذكاء، لإنشاء منتجات وخدمات مبتكرة في مجال الأمن السيبراني.
يتركز عمل TEGRA على مجالين ضمن مشهد الأمن السيبراني: أمن البيانات وتحليلات الأمان. نحن ملتزمون بإنشاء تقنيات متطورة يمكنها تغذية منتجاتنا وبالتالي توفير قيمة تمييزية لها.
راجع ملف CONTRIBUTORS.