הסבר והתקנה | הכירו את OpenCTI כלי Open-Source Threat Intelligence
OpenCTI
OpenCTI הוא כלי בקוד פתוח לCyber Threat Intelligence , הוא כלי לניהול , חיפוש, בדיקה ואיתור בתחום איומי הסייבר, כלי זה אוסף ממקורות שונים מה שמכונה CTI Data, המקורות השונים הללו, נקראים "גופי מודיעין" בסייבר, ניקח למשל את AlientVault OTX, שירות זה מפרסם את כלל הפגיעויות, נוזקות וIOC שונים שהם כגוף מודיעין אוסף.
אחד הדברים המעניינים הם ה IOC שהמערכת אוספת מכלל סוכנויות המודיעין ובכך ניתן לבדוק אם כתובת IP שזוהתה אצלכם בארגון היא כתובת זדונית, קבצים זדוניים המפורסמים כ- Hash, כתובות Domain של קבוצות תקיפה ועוד.
אותם איומים ואירועים שונים נאספים ממקורות שונים והמערכת OpenCTI מרכזת הכל, מאפשרת חיפוש, יצירת הקשרים, בדיקה של קבצים זדוניים, כתובות IP, כתובות DOMAIN , Hash ועוד
על מנת להציג חלק מיכולות המערכת אעבור על על כמה נושאים:
כאשר מקבלים איום כדוגמת Pay2Key Ransomware – A New Campaign by Fox Kitten שהוא קמפיין תקיפה אירני (זה כמובן רק דוגמה)
ניתן לקבל הסבר על התקיפה, דיווחים קשורים לתקיפה,איזה גוף מודיעין דיווח על אותו קמפיין \ תקיפה
במסך הKnowldege נוכל לקבל את הקשרים אל התקיפה, גופי המודיעין שדיווחו, כתובות זדוניות שנמצאו, ו IOC's נוספים
במסך ה Entites נוכל לקבל כרשימה את כלל ה IOC's
במסך ה Observables נוכל לחפש ולבצע סינון לפי סוגי קבצים, כתובות IP ועוד
במסך ה observations נקבל את כלל הIOS'c הכתובות, הקבצים והמזהים שהיו קשורים לתקיפה כזו או אחרת
במסך ה Indicators נקבל את כלל הIOS'c , כאן נוכל לחפש מזהים מסוימים ולבדוק אם הם דווחו ע"י גוף מודיעין מסוים ונוכל לטעון אותם למערכות ההגנה אצלנו
התקנת OpenCTI על Ubuntu 22.04
התקינו Ubuntu 22.04.01
עברו ל Root
sudo -i
כעת נתקין את כל ה Requrements
sudo apt update -y sudo apt install aptitude -y apt install python3 python3-pip -y apt install redis-server -y apt install rabbitmq-server -y rabbitmq-plugins enable rabbitmq_management
כעת נתקין את NodeJS וNPM
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
source ~/.bashrc
נבדוק איזה גרסה אחרונה קיימת
nvm list-remote
נתקין את גרסה 19.6
nvm install v19.6.0
נבדוק את הגרסה
node -v
התוצאה חייבת להיות
v19.6.0
כעת נבדוק את npm
npm -v
כעת נתקין את Minio שהוא שירות אחסון למידע, הוא תומך ב AWS ויכול לאחסן כל סוג מידע
wget https://dl.minio.io/server/minio/release/linux-amd64/minio
chmod +x minio
כעת נבצע התקנה של ElasticSearch
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add - echo "deb https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-8.x.list sudo apt update -y sudo apt install elasticsearch -y
נערוך את קובץ הקינפוג של Elasticsearch
sudo nano /etc/elasticsearch/elasticsearch.yml
בצעו את העריכה לפי התמונות
כעת נגדיר שElasticsearch יעלה בכל הפעלה מחדש ונפעיל אותו
sudo systemctl enable elasticsearch sudo systemctl start elasticsearch
כעת נבדוק שהוא עובד ואם הוא במצב Running אז נמשיך (ניתן לצאת ע"י ctrl+c)
sudo systemctl status elasticsearch
כעת נתקין את yarn
Yarn – הוא מנהל חבילות ל Javascript והוא תחליף מעולה ל NPM, איתו אפשר לנהל חבילות של JS , להתקין ולהפעיל חבילות של JS
curl -Ss https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add - echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee -a /etc/apt/sources.list.d/yarn.list apt update && apt install yarn -y
כעת נוריד ונלחץ את ההתקנה של opencti
wget https://github.com/OpenCTI-Platform/opencti/releases/download/5.5.2/opencti-release-5.5.2.tar.gz tar xvfz opencti-release-5.5.2.tar.gz
נעתיק את קובץ ההגדרות שאותו נערוך בהמשך
cp opencti/config/default.json opencti/config/production.json
כעת ניצור UUID באתר
https://www.uuidgenerator.net/version4
העתיקו את ה UUID גרסה 4 , את המספר העתיקו לקובץ טקסט בצד, נצטרך אותו להמשך!!!!
נערוך את קובץ ההגדרות
nano opencti/config/production.json
נשנה את כתובת המייל לשלכם (לא חייב אמיתי)
נשנה את הסיסמא לפאנל הניהול
נכניס את ה UUID שיצרנו קודם לכן
כעת נתקין עוד Depnencies
sudo apt update -y pip3 install -r opencti/src/python/requirements.txt
על מנת להריץ את minio ברקע, ניצור סקריפט שיריץ אותו ברגע בעזרת python
nano minio.py
נכניס לתוך הסקריפט את הפקודה
import os os.system('MINIO_ROOT_USER=admin MINIO_ROOT_PASSWORD=password ./minio server /mnt/data --console-address ":9001"')
נשמור ונצא
ניתן הרשאות ריצה לסקריפט
chmod +x minio.py
כעת נריץ אותו ברגע בעזרת nohup, למי שלא מכיר nohup היא פקודה בלינוקס להרצת פקודה ברקע , גם כאשר המשתמש שלכם התנתק מהמערכת
nohup python3 minio.py &
על מנת שלא תצרכו להריץ כל הפעלה מחדש את minio, נבצע את ההפעלה של הסקריפט בעזרת Cron
sudo crontab -e
בחרו ב1
נגדיר שבכל reboot הוא יעלה
@reboot python3 /root/minio.py
כעת נכנס לפאנל הניהול של minio
כמובן שאתם צריכים להכניס את כתובת ה IP שלכם
192.168.19.143:9000
השם משתמש והסיסמא הם
admin password
נתחבר אליו
כעת נעבור לAccess Keys וניצור מפתח ב Create Access Key, המטרה היא ש OpenCTI יתחבר ל minio על מנת לאחסן את כלל הנתונים ב MInio
לחצו על Create
כעת העתיקו לאותו מסמך טקסט ששמרת את ה UUID את המפתחות, נצטרך אותם עוד מעט
כעת נוודא רק שהמפתחות נשמרו במערכת ונמשיך
נערוך שוב את קובץ ההגדרות
nano opencti/config/production.json
כעת נעבור לשורה של minio ובו נדביק את המפתחות כמו בתמונה
כעת נעבור לתיקיית ה opencti
cd opencti
נבצע התקנה ע"י yarn
yarn install
נבצע קומפיל לחבילות
yarn build
כעת נגדיר שOpenCTI ירוץ בכל הפעלה מחדש
ניצור תחילה סקריפט ב Bash
sudo nano start-yarn-serv.sh
בסקריפט הבא , אנחנו בודקים שElasticSearch רץ, והוא ימתין עד אשר הוא ירוץ, ברגע שהוא רץ רק אז OpenCTI ירוץ
#!/bin/bash timeout=60 while true; do if curl --output /dev/null --silent --head --fail "http://localhost:9200"; then break fi if [ $timeout -eq 0 ]; then echo "Timed out while waiting for Elasticsearch service to start" >> /var/log/yarn-serv.log exit 1 fi timeout=$((timeout-1)) sleep 1 done cd /root/opencti nohup yarn serv &
נשמור ונסגור
ניתן לו הרשאות ריצה
chmod +x start-yarn-serv.sh
כעת נכנס לCron
sudo crontab -e
נוסיף שורה להרצת הסקריפט
@reboot /root/start-yarn-serv.sh
נעבור לתיקיית opencti
cd /root/opencti
כעת נפעיל את השרת בצורה ידנית
yarn serv
נכנס אל המערכת
http://192.168.19.149:4000/
שם המשתמש והסיסמא הם מה שקבעתם בקובץ ההגדרות
אצלי זה
tal@shushan.co.il
123456
Connectors
על מנת "למלא" את המערכת במידע מגופי מודיעין, ניקח לדוגמא את AlienVault על מנת לקבל אינדיקטורים, TI
בגלל שopencti פועל בחלון ה Putty הנוכחי
נפתח putty חדש
sudo -i
נעבור לתיקיית ה Connector של AlienVault
cd /root/opencti/connectors/external-import/alienvault
נתקין את ה Dependencies
pip3 install -r requirements.txt
נכנס לתיקיית ה src
cd src
נעתיק את קובץ הקונפיג
cp config.yml.sample config.yml
נערוך את קובץ הקונפיג
nano config.yml
כעת נצטרך את ה OTX API Key מחברת AlienVault
עליכם ליצור חשבון ועבור לעמוד הבא
https://otx.alienvault.com/api
העתיק את ה OTX Key לקובץ טקסט בצד
שנו את הפורט ל 4000 והכניסו מתחתיו את ה UUID ששמרנו בתחילת המדריך
ב Key למטה הכניסו את ה OTX Key
שמרו וצאו, כעת נפעיל את ה Connector
python3 main.py
המתינו שיסיים (חשוב!! הנפח המורד מגיע לג'יגות של מידע, דאגו למקום פנוי בכונן)
נוכל לבדוק את ההתקדמות בלשונית Data
נכנס לConnector
Worker
כעת כדי שהמידע יכנס למערכת אנחנו צריכים worker
פתחו putty נוסף התחברו
sudo -i
כעת כנסו לOpenCTI
cd opencti/worker
נתקין את הדרישות
pip3 install -r requirements.txt
כעת נעתיק את קובץ ההגדרות
cp config.yml.sample config.yml
נערוך את קובץ ההגדרות
sudo nano config.yml
נשנה את הפורט ל4000
נפעיל את הWorker – חייב אותו בשביל שהמידע יעבור מ RabbitMQ אל המערכת
python3 worker.py &
גם את Worker נרצה להפעיל בכל ריסטארט
נכנס ל Cron
crontab -e
נכניס לסוף השורה
@reboot /usr/bin/python3 /root/opencti/worker/worker.py &
לסיום!
הוספת Connectors נוספים
Amitt
cd /root/opencti/connectors/external-import/amitt/src cp config.yml.sample config.yml pip3 install -r requirements.txt sed -i 's/8080/4000/' config.yml sed -i "s/token: 'ChangeMe'/token: '50d7f4f9-e9ff-41af-bd70-b80cd4f2401a'/" config.yml sed -i "s/id: 'ChangeMe'/id: '50d7f4f9-e9ff-41af-bd70-b80cd4f2401a'/" config.yml nohup python3 amitt.py &