با وجود دلایل کاملا مشروع و قانونی برای استفاده از بیتکوین، این ارز دیجیتال همچنان توسط تروریستها، فروشندگان مواد مخدر و سایر افراد تبهکار استفاده می شود. به همین دلیل “Spiderfoot” وارد ماجرا می شود، “Spiderfoot” دارای یک رابط “Command-Line” جهت جستجو آدرس کیف پولهای بیتکوین و دریافت اطلاعات در رابطه با اعتبار مربوط به هریک از آنها است.
“Spiderfoot” بهصورت کلی ابزاری بینظیر برای مکانیزه کردن OSINT (هوش متن-باز) به شمار میرود، و همچنین دو نسخه متفاوت از آن وجود دارد:
- یک پروژه (اشتراک) رایگان و منبع-باز بههمراه “Spiderfoot HX“
- یک سرویس (اشتراک) پولی با هزینهای بالغ بر 800 دلار در سال
که در مورد این آموزش، نسخه رایگان جهت بررسی کیف پولهای بیتکوین و موجودیهای مربوط به هر یک کفایت میکند؛ همچنین برای انجام این کار به راهاندازی یک سرور وب نیازی نیست، اما جالب است بدانید اگر “Spiderfoot” را خارج از “CLI” استفاده کنید، لازم به راهاندازی یک سرور وب است.
بیایید فرض کنیم که یک سازمان خاص که میتواند قانونی یا غیرقانونی باشد،با استفاده از درخواست بیتکوین، به جمع آوری سرمایه میپردازد. میتوان با نظارت بر وبسایت مورد نظر، موقعیت و آدرس هر کیف پول بیتکوین که از دامنه سازمان مورد نظر استفاده میکند را بررسی کرد؛ سپس میتوان اطلاعات به دست آمده را به یک پرسشنامه داد تا اعتبار دقیق مربوط به هر یک از کیف پولهای بیتکوین را به ما بدهد.
پیشنیازها
برای استفاده کردن از “Spiderfoot CLI”، باید پایتون 3 را نصب کنید که بهصورت پیشفرض روی بسیاری از سیستمهای جدید لینوکس، مک او-اس و ویندوز نصب شده است. در صورت عدم وجود نسخه یا وجود نسخه قدیمیتری از پایتون، به آسانی می توان پایتون 3 را دانلود و نصب کرد.
برای یادگیری زبان پایتون روی لینک زیر کلیک کنید:
قدم اول :
نصب اسپایدرفوت
برای دریافت این ابزار لزومی به ورود به وبسایت اسپایدرفوت نیست. در عوض این کار، به محل ذخیره اطلاعات اسپایدرفوت در “Github” رفته و آن را دریافت می کنیم. کاربرد اسپایدرفوت بسیار فراتر از مواردی است که در این آموزش ارائه میشود. همچنین لیستی از ماژولهای مورد استفاده اسپایدرفوت در دسترس قرار داده شده تا بهوسیله ترکیب کردن آنها و زنجیر کردنشان به یکدیگر، پرسشنامههای جستجو خاصی تشکیل داده شود.
بعدها از دو ماژول استفاده خواهیم کرد، یک ماژول برای جستجو در سایت و جهت بدست آوردن آدرسهای بیتکوین و دیگری برای فرستادن آن آدرسها به پرسشنامه مربوط به اعتبار کیف پولهای بیتکوین. حال برای دانلود کردن “Spiderfoot” از طریق “Git”، ابتدا دستوری مشابه دستور بخش زیر را در یک ترمینال وارد کنید.
~$ git clone https://github.com/smicallef/spiderfoot.git
Cloning into ‘spiderfoot’…
remote: Enumerating objects: 43, done.
remote: Counting objects: 100% (43/43), done.
remote: Compressing objects: 100% (36/36), done.
remote: Total 20781 (delta 17), reused 18 (delta 7), pack-reused 20738
Receiving objects: 100% (20781/20781), 13.89 MiB | 9.34 MiB/s, done.
Resolving deltas: 100% (16727/16727), done.
سپس به سراغ فهرست رفته و فرمان لیست کردن “ls” را اجرا کنید.
~$ cd spiderfoot
~/spiderfoot$ ls
dicts modules sfcli.py static
Dockerfile passwd sflib.py test
dyn README.md sf.py THANKYOU
generate-certificate requirements_test.txt sfscan.py VERSION
LICENSE requirements.txt sfwebui.py
log setup.cfg spiderfoot
احتمالا میتوانید فایل “Requirement.txt” را ببینید؛ مطمئن شوید قبل از ادامه دادن، آن را بههمراه “Pip3” نصب میکنید. اگر این کار را نکنید، به احتمال زیاد اسپایدرفوت با شکست مواجه میشود؛ چونکه تمامی اجزای مورد نیاز برای داشتن یک عملکرد درست را در اختیار نخواهد داشت.
~/spiderfoot$ pip3 install -r requirements.txt
Defaulting to user installation because normal site-packages is not writeable
Requirement already satisfied: adblockparser>=0.7 in /usr/lib/python3/dist-packages (from -r requirements.txt (line 1)) (0.7)
Requirement already satisfied: dnspython>=1.16.0 in /usr/lib/python3/dist-packages (from -r requirements.txt (line 2)) (2.0.0)
Requirement already satisfied: exifread>=2.1.2 in /usr/lib/python3/dist-packages (from -r requirements.txt (line 3)) (2.3.2)
Requirement already satisfied: CherryPy>=18.0 in /home/kali/.local/lib/python3.8/site-packages (from -r requirements.txt (line 4)) (18.6.0)
Requirement already satisfied: cherrypy-cors>=1.6 in /home/kali/.local/lib/python3.8/site-packages (from -r requirements.txt (line 5)) (1.6)
Requirement already satisfied: Mako>=1.0.4 in /usr/lib/python3/dist-packages (from -r requirements.txt (line 6)) (1.1.3)
Requirement already satisfied: beautifulsoup4>=4.4.1 in /usr/lib/python3/dist-packages (from -r requirements.txt (line 7)) (4.9.3)
Requirement already satisfied: lxml>=4.6.1 in /usr/lib/python3/dist-packages (from -r requirements.txt (line 8)) (4.6.1)
Requirement already satisfied: netaddr>=0.7.18 in /usr/lib/python3/dist-packages (from -r requirements.txt (line 9)) (0.7.19)
Requirement already satisfied: pysocks>=1.7.1 in /usr/lib/python3/dist-packages (from -r requirements.txt (line 10)) (1.7.1)
Requirement already satisfied: requests>=2.20.0 in /usr/lib/python3/dist-packages (from -r requirements.txt (line 11)) (2.24.0)
Requirement already satisfied: ipwhois==1.0.0 in /home/kali/.local/lib/python3.8/site-packages (from -r requirements.txt (line 12)) (1.0.0)
Requirement already satisfied: ipaddr>=2.2.0 in /home/kali/.local/lib/python3.8/site-packages (from -r requirements.txt (line 13)) (2.2.0)
Requirement already satisfied: phonenumbers>=8.12.9 in /home/kali/.local/lib/python3.8/site-packages (from -r requirements.txt (line 14)) (8.12.13)
Requirement already satisfied: pygexf>=0.2.2 in /home/kali/.local/lib/python3.8/site-packages (from -r requirements.txt (line 15)) (0.2.2)
Requirement already satisfied: PyPDF2>=1.26.0 in /usr/lib/python3/dist-packages (from -r requirements.txt (line 16)) (1.26.0)
Requirement already satisfied: stem>=1.7.1 in /usr/lib/python3/dist-packages (from -r requirements.txt (line 17)) (1.8.0)
Requirement already satisfied: python-whois>=0.7.1 in /home/kali/.local/lib/python3.8/site-packages (from -r requirements.txt (line 18)) (0.7.3)
Requirement already satisfied: secure>=0.2.1 in /usr/lib/python3/dist-packages (from -r requirements.txt (line 19)) (0.2.1)
Requirement already satisfied: pyOpenSSL>=17.5.0 in /usr/lib/python3/dist-packages (from -r requirements.txt (line 20)) (19.1.0)
Requirement already satisfied: python-docx>=0.8.10 in /usr/lib/python3/dist-packages (from -r requirements.txt (line 21)) (0.8.10)
Requirement already satisfied: python-pptx>=0.6.18 in /usr/lib/python3/dist-packages (from -r requirements.txt (line 22)) (0.6.18)
Requirement already satisfied: networkx>=2.5 in /usr/lib/python3/dist-packages (from -r requirements.txt (line 23)) (2.5)
Requirement already satisfied: cryptography>=3.2.1 in /usr/lib/python3/dist-packages (from -r requirements.txt (line 24)) (3.2.1)
Requirement already satisfied: publicsuffixlist>=0.7.3 in /home/kali/.local/lib/python3.8/site-packages (from -r requirements.txt (line 25)) (0.7.5)
Requirement already satisfied: portend>=2.1.1 in /home/kali/.local/lib/python3.8/site-packages (from CherryPy>=18.0->-r requirements.txt (line 4)) (2.7.0)
Requirement already satisfied: more-itertools in /usr/lib/python3/dist-packages (from CherryPy>=18.0->-r requirements.txt (line 4)) (4.2.0)
Requirement already satisfied: zc.lockfile in /home/kali/.local/lib/python3.8/site-packages (from CherryPy>=18.0->-r requirements.txt (line 4)) (2.0)
Requirement already satisfied: cheroot>=8.2.1 in /home/kali/.local/lib/python3.8/site-packages (from CherryPy>=18.0->-r requirements.txt (line 4)) (8.4.7)
Requirement already satisfied: jaraco.collections in /home/kali/.local/lib/python3.8/site-packages (from CherryPy>=18.0->-r requirements.txt (line 4)) (3.0.0)
Requirement already satisfied: httpagentparser>=1.5 in /home/kali/.local/lib/python3.8/site-packages (from cherrypy-cors>=1.6->-r requirements.txt (line 5)) (1.9.0)
Requirement already satisfied: soupsieve>1.2 in /usr/lib/python3/dist-packages (from beautifulsoup4>=4.4.1->-r requirements.txt (line 7)) (2.0.1)
Requirement already satisfied: future in /usr/lib/python3/dist-packages (from python-whois>=0.7.1->-r requirements.txt (line 18)) (0.18.2)
Requirement already satisfied: tempora>=1.8 in /home/kali/.local/lib/python3.8/site-packages (from portend>=2.1.1->CherryPy>=18.0->-r requirements.txt (line 4)) (4.0.1)
Requirement already satisfied: setuptools in /usr/lib/python3/dist-packages (from zc.lockfile->CherryPy>=18.0->-r requirements.txt (line 4)) (50.3.0)
Requirement already satisfied: jaraco.functools in /home/kali/.local/lib/python3.8/site-packages (from cheroot>=8.2.1->CherryPy>=18.0->-r requirements.txt (line 4)) (3.0.1)
Requirement already satisfied: six>=1.11.0 in /usr/lib/python3/dist-packages (from cheroot>=8.2.1->CherryPy>=18.0->-r requirements.txt (line 4)) (1.15.0)
Requirement already satisfied: jaraco.text in /home/kali/.local/lib/python3.8/site-packages (from jaraco.collections->CherryPy>=18.0->-r requirements.txt (line 4)) (3.2.0)
Requirement already satisfied: jaraco.classes in /home/kali/.local/lib/python3.8/site-packages (from jaraco.collections->CherryPy>=18.0->-r requirements.txt (line 4)) (3.1.0)
Requirement already satisfied: pytz in /usr/lib/python3/dist-packages (from tempora>=1.8->portend>=2.1.1->CherryPy>=18.0->-r requirements.txt (line 4)) (2020.4)
اگر با نصب اسپایدرفوت از طریق کد دستوری بالا مشکل دارید، ابتدا سعی کنید از “apt update” استفاده کنید و مجددا تلاش کنید. اگر بازهم با مشکل مواجه شدید، دستور بالا را بهمراه “Sudo” در مقابل آن اجرا کنید.
قدم دوم:
مطمئن شوید اسپایدرفوت به درستی کار می کند.
اکنون که “SpiderFoot” کاملا آماده است، وقت آن است که با استفاده از یک خط فرمان استدلالی کاربرد آن را شروع کنیم، تا اطلاعاتی را که میخواهیم برگردانده باشیم را به ما منتقل کند. از دستور لیست کردن “ls” انجام شده در بخش بالا، میتوانید بهراحتی فایل “sf.py” را مشاهده کنید، و این درست همان برنامه اصلی است که ما در اینجا استفاده خواهیم کرد. بیایید آن را امتحان کنیم تا ببینیم کار میکند یا نه:
~/spiderfoot$ python3 ./sf.py
You must specify a target when running in scan mode. Try --help for guidance.
اگر مورد دیگری مشاهده کردید، و اگر اکنون یا در مرحله بعد با خطا روبرو شدید، به عقب برگردید و دوباره “Requirement.txt” را با “pip3” نصب کنید. اگر این هم کار نکرد، آن را با “sudo” نصب کنید، که باید ماژولهای از دست رفته را برطرف کند.
حالا ، بیایید سریعا صفحه راهنما را مرور کنیم تا دستورالعمل های استفاده را ببینیم
~/spiderfoot$ python3 ./sfcli.py --help
usage: sf.py [-h] [-d] [-l IP:port] [-m mod1,mod2,...] [-M] [-s TARGET]
[-t type1,type2,...] [-T] [-o tab|csv|json] [-n] [-r] [-S LENGTH]
[-D DELIMITER] [-f] [-F FILTER] [-x] [-q]
SpiderFoot 3.0: Open Source Intelligence Automation.
optional arguments:
-h, --help show this help message and exit
-d, --debug Enable debug output.
-l IP:port IP and port to listen on.
-m mod1,mod2,... Modules to enable.
-M, --modules List available modules.
-s TARGET Target for the scan.
-t type1,type2,... Event types to collect.
-T, --types List available event types.
-o tab|csv|json Output format. Tab is default.
-n Strip newlines from data.
-r Include the source data field in tab/csv output.
-S LENGTH Maximum data length to display. By default, all data is
shown.
-D DELIMITER Delimiter to use for CSV output. Default is ,.
-f Filter out other event types that weren't requested with
-t.
-F FILTER Filter out a set of event types.
-x STRICT MODE. Will only enable modules that can directly
consume your target, and if -t was specified only those
events will be consumed by modules. This overrides -t
and -m options.
-q Disable logging.
قدم سوم:
بهدنبال آدرسها و اعتبارات کیف پولهای بیتکوین جستجو کنید.
حال، بیایید نگاهی به آدرس بیتکوین و موجودی کیف پول مورد نظر که آن را از یک وبسایت “اسکرپ” کردیم، بیندازیم. برای انجام این کار باید چند مورد را با هم ترکیب کنیم، اینجاست که ماژولها وارد عمل میشوند.
~/spiderfoot$ python3 ./sf.py -m sfp_spider,sfp_bitcoin,sfp_blockchain -s websiteurl.com -F -q BITCOIN_ADDRESS,BITCOIN_BALANCE -q
در بخش بالا، بهراحتی میتوانید دستوری را مشاهده کنید که برای انجام آنچه نیاز داریم استفاده میکنیم.
اولین قسمت دستور، ابزار “SpiderFoot” را با “پایتون3” آغاز میکند. “-m” نشان میدهد که شما از یک یا چند ماژول استفاده میکنید و درست کمی بعد از آن، جایی است که ماژولها با کاما از همدیگر جدا میشوند.
ماژول “sfp_spider” صفحات وب مربوط به وبسایتی را که جهت یافتن تمام اطلاعات موجود در داخل آن اسکن میکنیم، بررسی “Spider” میکند.
ماژول “sfp_bitcoin” تمام آدرس کیف پولهای بیتکوین را که از طریق “spidering” پیدا کرده،جدا میکند.
ماژول “sfp_blockchain” آدرسهای بیتکوینها را دریافت میکند و آنها را به یک “API” منتقل میکند که مقدار اعتبار دقیق ذخیره شده در هر کیف پول را تعیین می کند.
در بخش بعدی دستور، ما “–s” را داریم که به دنبال آن “URL” وبسایت موردنظر وجود دارد که به ما این امکان را میدهد که وبسایت هدف را انتخاب کنیم.
سپس، ما “-F” را داریم تا بتوانیم مجموعهای از انواع رویدادها را بهخصوص “BITCOIN_ADDRESS” و “BITCOIN_BALANCE” را فیلتر کنیم. اینها همان اطلاعاتی است که میخواهیم پیدا کنیم.
سرانجام ، “-q” که برای پنهان کردن همه چیز در خروجی مورد استفاده قرار میگیرد؛ البته که به جز موارد مورد نظر ما.
حالا، بیایید آن را در برابر یک وبسایت واقعی اجرا کنیم، و به عنوان مثال از سایت “bitcoinforcharity.com” بهعنوان یک نمونه استفاده کنیم.
~/spiderfoot$ python3 ./sf.py -m sfp_spider,sfp_bitcoin,sfp_blockchain -s bitcoinforcharity.com -F BITCOIN_ADDRESS,BITCOIN_BALANCE -q
Source Type Data
sfp_bitcoin Bitcoin Address 1HesYJSP1QqcyPEjnQ9vzBL1wujruNGe7R
sfp_blockchain Bitcoin Balance 0.00021 BTC
sfp_bitcoin Bitcoin Address 16Sy8mvjyNgCRYS14m1Rtca3UfrFPzz9eJ
sfp_blockchain Bitcoin Balance 0.24481116 BTC
sfp_bitcoin Bitcoin Address 1M72Sfpbz1BPpXFHz9m3CdqATR44Jvaydd
sfp_blockchain Bitcoin Balance 1.62908644 BTC
sfp_bitcoin Bitcoin Address 1946W6LDsEYF9B5sPYDKfwLw6YBZuHns4L
sfp_blockchain Bitcoin Balance 0.02344126 BTC
sfp_bitcoin Bitcoin Address 1PC9aZC4hNX2rmmrt7uHTfYAS3hRbph4UN
sfp_blockchain Bitcoin Balance 1.89378293 BTC
sfp_bitcoin Bitcoin Address 1PAt5oKQGBRigFDY6fB2WgQTtQJNzFyTDr
sfp_blockchain Bitcoin Balance 0.0 BTC
sfp_bitcoin Bitcoin Address 1NgiUwkhYVYMy3eoMC9dHcvdHejGxcuaWm
sfp_blockchain Bitcoin Balance 0.06070947 BTC
sfp_bitcoin Bitcoin Address 1M87hiTAa49enJKVeT9gzLjYmJoYh9V98
sfp_blockchain Bitcoin Balance 0.0 BTC
sfp_bitcoin Bitcoin Address 1CU5YgjquupDw6UeXEyA9VEBH34R7fZ19b
sfp_blockchain Bitcoin Balance 0.16549195 BTC
sfp_bitcoin Bitcoin Address 16DEzKc9fX4XfgGzEvQUJmoYeUrbRNXqxe
sfp_blockchain Bitcoin Balance 0.18967667 BTC
sfp_bitcoin Bitcoin Address 1AS3TiTqgJZK6CfNfqcbPXSx4PTFvfghvF
sfp_blockchain Bitcoin Balance 0.0 BTC
sfp_bitcoin Bitcoin Address 1Archive1n2C579dMsAu3iC6tWzuQJz8dN
sfp_blockchain Bitcoin Balance 3.17865301 BTC
از خروجی لیست شده در بخش بالا، می توان این موضوع را دریافت کنید که این موسسه خیریه بیش از چند آدرس بیتکوین ذکر شده در فهرست عمومی خود دارد و به کیف پولهایی باز میگردند که در آنجا مقدار دقیق بیت کوینها را مشاهده میکنیم. از آنجایی که کیف پول دارای بیشترین اعتبار در این موسسه خیریه، دارای چنین “3.17865301 BTC” اعتباری است؛ در نتیجه موسسه فوق در واقع هیچ بیتکوین واقعی ایجاد نمیکند. اگر به دنبال سایتی بودیم که جابجایی پول زیاد در آن از طریق ارزهای مبتنی بر رمز انجام میپذیرفت، این سایت توقع ما را برآورده نمیکرد.
قدم چهارم:
آدرسهای “Ethereum” را اسکن کنید
برای “Ethereum” ، میتوانید از ساختار دستوری متفاوتی برای بهدست آوردن آدرس کیف پولهای موجود در وبسایتها استفاده کنید، اما نمیتوانید اعتبار هر کیف پول را درست همانند بیتکوین بهدست آورید. بهعنوان مثال، “etherdonation.com” را اسکن میکنیم.
~/spiderfoot$ python3 ./sf.py -m sfp_spider,sfp_ethereum -s etherdonation.com -F ETHEREUM_ADDRESS -q
Source Type Data
sfp_ethereum Ethereum Address 0xed6ca7d908f897d0b0d5f9b9e7aa470698e10b1b
sfp_ethereum Ethereum Address 0xed6ca7d908f897d0b0d5f9b9e7aa470698e10b1b
sfp_ethereum Ethereum Address 0xed6ca7d908f897d0b0d5f9b9e7aa470698e10b1b
sfp_ethereum Ethereum Address 0xed6ca7d908f897d0b0d5f9b9e7aa470698e10b1b
sfp_ethereum Ethereum Address 0xed6ca7d908f897d0b0d5f9b9e7aa470698e10b1b
sfp_ethereum Ethereum Address 0xed6ca7d908f897d0b0d5f9b9e7aa470698e10b1b
تمام کاری که ما در اینجا انجام دادهایم استفاده از “sfp_spider” ، ماژول “spidering” و “sfp_ethereum” و ماژول یافتن “Ethereum” بود. و از آنجایی که نمیتوانیم اعتبارهای مربوط به “Ethereum” را بیابیم؛ فیلتر گذاری در رابطه با اعتبار هر یک را غیرفعال کردهایم.
ابزاری ساده اما قدرتمند
اگر میخواهید برخی از سازمانهای دارای بیشترین معاملات بیتکوین را مشاهده کنید، میتوانید چیزی مانند “100” آدرس برتر بیتکوین را در گوگل جستجو کرده و نتیجهای را انتخاب کنید که برترینها را کنترل میکند. سپس، میتوانید از آدرس آن سایت در دستور استفاده کنید تا ببینید کدام یک از آدرسهای بیتکوین بیشترین مقدار بیتکوین را جابهجا میکنند.