
توليد قائمة بالنطاقات المحتملة للتصيد الإملائي (typo squatting) باستخدام محرك تبديل أسماء النطاقات لتغذية AIL والأنظمة الأخرى.
ail-typo-squatting هي مكتبة بلغة بايثون لتوليد قائمة من نطاقات التصيّد الاحتيالي المحتملة (typo squatting) عبر محرّك توليف أسماء النطاقات، لتغذية نظام AIL وأنظمة أخرى.
يمكن استخدام الأداة بشكل مستقل أو لتغذية أنظمة أخرى.
إذا كنت لا تريد استخدام مكتبة بايثون، فإن https://typosquatting-finder.circl.lu/ هو خدمة عبر الإنترنت تستخدم هذه المكتبة.
Python 3.6+
مكتبة inflect
يمكن تثبيت ail-typo-squatting باستخدام poetry. إذا لم يكن poetry مثبتًا لديك، يمكنك تنفيذ الأمر التالي curl -sSL https://install.python-poetry.org | python3 -.
$ poetry install
$ poetry shell
$ cd ail-typo-squatting
$ python typo.py -h
$ pip3 install ail-typo-squatting
dacru@dacru:~/git/ail-typo-squatting/bin$ python3 typo.py --help
usage: typo.py [-h] [-v] [-dn DOMAINNAME [DOMAINNAME ...]] [-fdn FILEDOMAINNAME] [-o OUTPUT] [-fo FORMATOUTPUT] [-br] [-dnsr] [-dnsl] [-l LIMIT] [-var] [-ko] [-a] [-om] [-repe] [-repl] [-drepl] [-cho]
[-add] [-md] [-sd] [-vs] [-ada] [-hg] [-ahg] [-cm] [-hp] [-wt] [-wsld] [-at] [-sub] [-sp] [-cdd] [-addns] [-uddns] [-ns] [-combo] [-ca]
optional arguments:
-h, --help show this help message and exit
-v verbose, more display
-dn DOMAINNAME [DOMAINNAME ...], --domainName DOMAINNAME [DOMAINNAME ...]
list of domain name
-fdn FILEDOMAINNAME, --filedomainName FILEDOMAINNAME
file containing list of domain name
-o OUTPUT, --output OUTPUT
path to ouput location
-fo FORMATOUTPUT, --formatoutput FORMATOUTPUT
format for the output file, yara - regex - yaml - text. Default: text
-br, --betterregex Use retrie for faster regex
-dnsr, --dnsresolving
resolve all variation of domain name to see if it's up or not
-dnsl, --dnslimited resolve all variation of domain name but keep only up domain in final result json
-l LIMIT, --limit LIMIT
limit of variations for a domain name
-var, --givevariations
give the algo that generate variations
-ko, --keeporiginal Keep in the result list the original domain name
-a, --all Use all algo
-om, --omission Leave out a letter of the domain name
-repe, --repetition Character Repeat
-repl, --replacement Character replacement
-drepl, --doublereplacement
Double Character Replacement
-cho, --changeorder Change the order of letters in word
-add, --addition Add a character in the domain name
-md, --missingdot Delete a dot from the domain name
-sd, --stripdash Delete of a dash from the domain name
-vs, --vowelswap Swap vowels within the domain name
-ada, --adddash Add a dash between the first and last character in a string
-hg, --homoglyph One or more characters that look similar to another character but are different are called homogylphs
-ahg, --all_homoglyph
generate all possible homoglyph permutations. Ex: circl.lu, e1rc1.lu
-cm, --commonmisspelling
Change a word by is misspellings
-hp, --homophones Change word by an other who sound the same when spoken
-wt, --wrongtld Change the original top level domain to another
-wsld, --wrongsld Change the original second level domain to another
-at, --addtld Adding a tld before the original tld
-sub, --subdomain Insert a dot at varying positions to create subdomain
-sp, --singularpluralize
Create by making a singular domain plural and vice versa
-cdd, --changedotdash
Change dot to dash
-addns, --adddynamicdns
Add dynamic dns at the end of the domain
-uddns, --updatedynamicdns
Update dynamic dns warning list
-ns, --numeralswap Change a numbers to words and vice versa. Ex: circlone.lu, circl1.lu
-combo Combine multiple algo on a domain name
-ca, --catchall Combine with -dnsr. Generate a random string in front of the domain.
ail-project.org و circl.lu باستخدام جميع الخوارزميات.dacru@dacru:~/git/ail-typo-squatting/bin$ python3 typo.py -dn ail-project.org circl.lu -a -o .
dacru@dacru:~/git/ail-typo-squatting/bin$ python3 typo.py -fdn domain.txt -co -sub -hyp -o . -fo yara
ail-project.org و circl.lu باستخدام جميع الخوارزميات مع تحليل DNS.dacru@dacru:~/git/ail-typo-squatting/bin$ python3 typo.py -dn ail-project.org circl.lu -a -dnsr -o .
ail-project.org مع إظهار الخوارزمية التي ولّدت الاشتقاق (لصيغة النص فقط).dacru@dacru:~/git/ail-typo-squatting/bin$ python3 typo.py -dn ail-project.org -a -o - -var
from ail_typo_squatting import runAll
import math
resultList = list()
domainList = ["google.com"]
formatoutput = "yara"
pathOutput = "."
for domain in domainList:
resultList = runAll(
domain=domain,
limit=math.inf,
formatoutput=formatoutput,
pathOutput=pathOutput,
verbose=False,
givevariations=False,
keeporiginal=False
)
print(resultList)
resultList = list()
from ail_typo_squatting import formatOutput, omission, subdomain, addDash
import math
resultList = list()
domainList = ["google.com"]
limit = math.inf
formatoutput = "yara"
pathOutput = "."
for domain in domainList:
resultList = omission(domain=domain, resultList=resultList, verbose=False, limit=limit, givevariations=False, keeporiginal=False)
resultList = subdomain(domain=domain, resultList=resultList, verbose=False, limit=limit, givevariations=False, keeporiginal=False)
resultList = addDash(domain=domain, resultList=resultList, verbose=False, limit=limit, givevariations=False, keeporiginal=False)
print(resultList)
formatOutput(format=formatoutput, resultList=resultList, domain=domain, pathOutput=pathOutput, givevariations=False)
resultList = list()
هناك 4 صيغ ممكنة لملف الإخراج:
بالنسبة لملف Text، كل سطر هو اشتقاق.
ail-project.org
il-project.org
al-project.org
ai-project.org
ailproject.org
ail-roject.org
ail-poject.org
ail-prject.org
ail-proect.org
ail-projct.org
ail-projet.org
ail-projec.org
aail-project.org
aiil-project.org
...
بالنسبة لملف Yara، كل قاعدة هي اشتقاق.
rule ail-project_org {
meta:
domain = "ail-project.org"
strings:
$s0 = "ail-project.org"
$s1 = "il-project.org"
$s2 = "al-project.org"
$s3 = "ai-project.org"
$s4 = "ailproject.org"
$s5 = "ail-roject.org"
$s6 = "ail-poject.org"
$s7 = "ail-prject.org"
$s8 = "ail-proect.org"
$s9 = "ail-projct.org"
$s10 = "ail-projet.org"
$s11 = "ail-projec.org"
condition:
any of ($s*)
}
بالنسبة لملف Regex، يتم تحويل كل اشتقاق إلى regex ودمجه مع البقية لتشكيل regex واحد كبير.
ail\-project\.org|il\-project\.org|al\-project\.org|ai\-project\.org|ailproject\.org|ail\-roject\.org|ail\-poject\.org|ail\-prject\.org|ail\-proect\.org|ail\-projct\.org|ail\-projet\.org|ail\-projec\.org
بالنسبة لملف Sigma، يتم سرد كل الاشتقاقات تحت المفتاح variations.
title: ail-project.org
variations:
- ail-project.org
- il-project.org
- al-project.org
- ai-project.org
- ailproject.org
- ail-roject.org
- ail-poject.org
- ail-prject.org
- ail-proect.org
- ail-projct.org
- ail-projet.org
- ail-projec.org
في حال تم تحديد تحليل DNS، سيتم إنشاء ملف إضافي بصيغة JSON
كل مفتاح هو اشتقاق وقد يحتوي على حقل "ip" إذا تم حل اسم النطاق. وسيكون الحقل "NotExist" موجودًا دائمًا بقيمة منطقية (Boolean) لتحديد ما إذا كان النطاق موجودًا أم لا.
{
"circl.lu": {
"NotExist": false,
"ip": [
"185.194.93.14"
]
},
"ircl.lu": {
"NotExist": true
},
"crcl.lu": {
"NotExist": true
},
"cicl.lu": {
"NotExist": true
},
"cirl.lu": {
"NotExist": true
},
"circ.lu": {
"NotExist": true
},
"ccircl.lu": {
"NotExist": true
},
"ciircl.lu": {
"NotExist": true
},
...
}

تم تمويل المشروع بشكل مشترك من قبل CEF-TC-2020-2 - 2020-EU-IA-0260 - JTAN - Joint Threat Analysis Network.
| Algo | الوصف |
|---|
| AddDash | تُنشأ هذه الأخطاء الإملائية بإضافة واصلة بين أول وآخر حرف في السلسلة النصية. |
| Addition | تُنشأ هذه الأخطاء الإملائية بإضافة حرف إلى اسم النطاق. |
| AddDynamicDns | تُنشأ هذه الأخطاء الإملائية بإضافة DNS ديناميكي في نهاية النطاق الأصلي. |
| AddTld | تُنشأ هذه الأخطاء الإملائية بإضافة نطاق أعلى (tld) قبل النطاق الأعلى الصحيح. مثال: google.com يصبح google.com.it |
| ChangeDotDash | تُنشأ هذه الأخطاء الإملائية بتغيير النقطة إلى واصلة. |
| ChangeOrder | تُنشأ هذه الأخطاء الإملائية بتغيير ترتيب الأحرف في كل جزء من النطاق. |
| Combo | تُنشأ هذه الأخطاء الإملائية بدمج خوارزميات متعددة. على سبيل المثال، circl.lu يصبح cirl6.lu |
| CommonMisspelling | تُنشأ هذه الأخطاء الإملائية بتغيير الكلمة إلى خطئها الإملائي الشائع. أكثر من 8000 خطأ إملائي شائع من ويكيبيديا. على سبيل المثال، www.youtube.com يصبح www.youtub.com و www.abseil.com يصبح www.absail.com. |
| Double Replacement | تُنشأ هذه الأخطاء الإملائية باستبدال الأحرف المتماثلة والمتتالية في اسم النطاق. |
| Homoglyph | تُنشأ هذه الأخطاء الإملائية باستبدال الأحرف بحرف آخر يبدو مشابهًا لكنه مختلف. مثال على ذلك أن الحرف l الصغير يشبه الرقم واحد، مثل l مقابل 1. على سبيل المثال، google.com يصبح goog1e.com. |
| Homophones | تُنشأ هذه الأخطاء الإملائية بتغيير الكلمة إلى كلمة أخرى تُنطق بنفس الطريقة. أكثر من 450 مجموعة من الكلمات التي تُنطق بنفس الطريقة. على سبيل المثال، www.base.com يصبح www.bass.com. |
| MissingDot | تُنشأ هذه الأخطاء الإملائية بحذف نقطة من اسم النطاق. |
| NumeralSwap | تُنشأ هذه الأخطاء الإملائية بتغيير الرقم إلى كلمات والعكس صحيح. على سبيل المثال، circlone.lu يصبح circl1.lu. |
| Omission | تُنشأ هذه الأخطاء الإملائية بحذف حرف من اسم النطاق، حرفًا واحدًا في كل مرة. |
| Repetition | تُنشأ هذه الأخطاء الإملائية بتكرار حرف من اسم النطاق. |
| Replacement | تُنشأ هذه الأخطاء الإملائية باستبدال كل حرف من أحرف اسم النطاق. |
| StripDash | تُنشأ هذه الأخطاء الإملائية بحذف واصلة من اسم النطاق. |
| SingularPluralize | تُنشأ هذه الأخطاء الإملائية بجعل النطاق المفرد جمعًا والعكس صحيح. |
| Subdomain | تُنشأ هذه الأخطاء الإملائية بوضع نقطة في اسم النطاق لإنشاء نطاق فرعي. مثال: google.com يصبح goo.gle.com |
| VowelSwap | تُنشأ هذه الأخطاء الإملائية بتبديل أحرف العلة داخل اسم النطاق باستثناء الحرف الأول. على سبيل المثال، www.google.com يصبح www.gaagle.com. |
| WrongTld | تُنشأ هذه الأخطاء الإملائية بتغيير النطاق الأعلى الأصلي إلى نطاق آخر. على سبيل المثال، www.trademe.co.nz يصبح www.trademe.co.mz و www.google.com يصبح www.google.org. يستخدم أكثر 19 نطاقًا أعلى شيوعًا. |
| WrongSld | تُنشأ هذه الأخطاء الإملائية بتغيير نطاق المستوى الثاني الأصلي إلى نطاق آخر. على سبيل المثال، www.trademe.co.uk يصبح www.trademe.ac.uk و www.google.com سيبقى www.google.com. |