55일차

55일차

홈으로 돌아가기




client 분석

HalT
ntdll. PE
ntdll.RtlNtdllName+74A8

L "C:\\windows"

TermservGetWindowsDirectoryw라는 API를 호출하는것을 확인

ZwEnumerateValueKey+C


C:\ProgramData 에서 무언가를 함 regid ?? 확인해볼것

그후 자신을 다시 호출하고

bcrypt.dll << DLL을 로드함
>> 소켓 연결을 시도하는 python27\Scripts\build\client\out00-PYZ.pyz\soket 
line 224 에서 응답 받지못하고 일시중지함


Traceback (most recent call last):
  File "<string>", line 159, in <module>
  File "<string>", line 150, in main
  File "<string>", line 35, in __init__
  File "C:\Python27\Scripts\build\client\out00-PYZ.pyz\socket", line 224, in meth
socket.error: [Errno 10060] 연결된 구성원으로부터 응답이 없어 연결하지 못

계속 진행하면 bcrypt.dll 이 연결을 시도하지만 실패하면서 createing child process! 가 나오게됨

"1.2.7"??????????

rdi:"C:\\Users\\PC11\\AppData\\Local\\Temp\\_MEI13802"
rdi값에 Temp의 무언가를 불러옴

MEIPASS2

kiUserExceptionDispatcher

b_hashlib.pyd
Crypto.util._counter.pyd
bwin32console.pyd
Crypto.util.strxor.pyd
Crypto.Cipher._AES.pyd
Crypto.Random.OSRNG.winrandom.pyd
pyexpat.pyd
win32crypt.pyd
Crypto.Hash._SHA256.pyd
pyHook
값들을 메모리에 불러온후에 temp경로에 생성하는것이었음

C:\Users\PC11\AppData\Local\Temp\_MEI102322

해당 경로에서 include된 파일 안에서 컴파일러와 버전을 찾음
This is a manually maintained version used for the Watcom,
Borland and Microsoft Visual C++ compilers.  It is a
standard part of the Python distribution.

/* set the COMPILER */
#ifdef MS_WIN64
#if defined(_M_IA64)
#define COMPILER _Py_PASTE_VERSION("64 bit (Itanium)")
#define MS_WINI64
#elif defined(_M_X64) || defined(_M_AMD64)
#define COMPILER _Py_PASTE_VERSION("64 bit (AMD64)")
#define MS_WINX64
#else
#define COMPILER _Py_PASTE_VERSION("64 bit (Unknown)")
#endif
#endif /* MS_WIN64 */

/* set the version macros for the windows headers */
#ifdef MS_WINX64
/* 64 bit only runs on XP or greater */
#define Py_WINVER _WIN32_WINNT_WINXP
#define Py_NTDDI NTDDI_WINXP
#else
/* Python 2.6+ requires Windows 2000 or greater */
#ifdef _WIN32_WINNT_WIN2K
#define Py_WINVER _WIN32_WINNT_WIN2K
#else
#define Py_WINVER 0x0500
#endif
#define Py_NTDDI NTDDI_WIN2KSP4
#endif

/* VC 7.1 has them and VC 6.0 does not.  VC 6.0 has a version number of 1200.
   Microsoft eMbedded Visual C++ 4.0 has a version number of 1201 and doesn't
   define these.
   If some compiler does not provide them, modify the #if appropriately. */

이걸 다 준비한후에 

C:\windows\Sytem32\bcrypt.dll DLL을 로드함
여기서 응답을 받지못함

Bcrypt.dll은 해시 생성 또는 데이터 암호화 및 암호 해독과 같은 기능을 광범위하게 제공하는 라이브러리 제품군의 하나입니다.

bcrypt.dll은 Windows OS에 필수적인 것은 아니나 멜웨어 같은 바이러스는 해당 파일이C:\WINDOWS\system32 폴더에 없을 경우 이것으로 위장하기도 한다점을 기억하기 바랍니다.

그 후 예외처리에 대한 루프들을 돌면서 값을 리턴하고 만들었던 악성 코드가 들어있는 폴더를 삭제함
C:\Users\PC11\AppData\Local\Temp\_MEI102322


트로이목마 프로젝트는 여기까지

플라스크 또는 장고를 이용한 로그 분석 시스템 구축

로그 데이터 : 192.168.0.118
센서 데이터 : 192.168.0.98

센서
mysql
use master
show tables;
select * from sensor_data order by idx desc limit 0,10;

cmd에서
flask run
웹페이지 가동
127.0.0.1:5000


CI4 > MVC(model,view,controller)
Flask, Django > MTV(model,temolate,view)


veiw에 main.py작성
from flask import Blueprint

bp = Blueprint('main',__name__,url_prefix='/')
@bp.route('/')
def index():
	return 'Hello'

@bp.route('/profile')
def profile():
	return 'profile'

@bp.route('/init')
def init():
	return 'init'

security안에
templaes생성 그안에 main생성하고 init.html 작성
@bp.route('/init')
def init():
	return render_template('main/init.html')

127.0.0.1:5000/
127.0.0.1:5000/init
127.0.0.1:5000/profile


127.0.0.1:5000/syslog
127.0.0.1:5000/sensor


__init__에 경로 추가 import, blueprint
templates 폴더와 html추가
views에 .py 작성

auth도 작성

startbootstrap.com
소스 받아오기

templates밑에 base.html 만들기
base.html
a
% block content %}
% endblock %}

templates/main/index.html
% extends 'base.html' %}
% block content %}
aa

% endblock %}


static에 
css img js scss vendor 넣어주기

경로에 /static/ 추가해주기
base.html footer.html

본인의 관리서버에 아파치 또는 nginx설치후 flask와 연동

sudo apt update
sudo apt -y install lrzsz
sudo apt -y install unzip

date 
#sudo ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime
cd ~
mkdir venvs
cd venvs
python3 -m venv mysite
cd mysite
cd bin
. activate

pip install wheel
pip install flask
pip install Flask-Migrate
pip install Flask-WTF
pip install email_validator
pip install Flask-Markdown
pip install pymysql
pip install mysql-connector-python
pip install cryptography

---

cd /home/master/venvs
nano mysite.sh
#!/bin/bash
cd ~/projects/flask
export FLASK_APP=security
export FLASK_ENV=production
export APP_CONFIG_FILE=/home/master/projects/flask/config/production.py
. ~/venvs/mysite/bin/activate

---

cd ~
nano .profile
alias mysite='export FLASK_APP=security;export FLASK_ENV=production;export APP_CONFIG_FILE=/home/master/projects/flask/config/production.py; cd ~/projects/flask; . /home/master/venvs/mysite/bin/activate'
source .profile
mysite #cmd처럼 mysite만 쳐도 플라스크 접속 가능

---

cd /home/master/venvs
nano mysite.env
FLASK_APP=security
FLASK_ENV=production
APP_CONFIG_FILE=/home/master/projects/flask/config/production.py

---

sudo apt -y install nginx

---

cd /etc/nginx/sites-available
sudo nano mysite
server {
  listen 80;
  server_name 192.168.X.XXX;
  location = /favicon.ico { access_log off; log_not_found off; }
  location /static {
    alias /home/master/projects/flask/security/static;
  }
  location / {
    include proxy_params;
    proxy_pass http://unix:/tmp/mysite.sock;
  }
}

---

cd /etc/nginx/sites-enabled
sudo rm -rf default

sudo ln -s /etc/nginx/sites-available/mysite

sudo systemctl restart nginx
sudo nginx -t
sudo systemctl start nginx


---

pip install gunicorn

---

sudo nano /etc/systemd/system/mysite.service
[Unit]
  Description=gunicorn daemon
  After=network.target
[Service]
  User=master
  Group=master
  WorkingDirectory=/home/master/projects/flask
  EnvironmentFile=/home/master/venvs/mysite.env
  ExecStart=/home/master/venvs/mysite/bin/gunicorn \
    --workers 2 \
    --bind unix:/tmp/mysite.sock \
    "security:create_app()"
[Install]
  WantedBy=multi-user.target

---

sudo systemctl enable nginx
sudo systemctl enable mysite

mkdir projects
cd projects
mkdir flask
cd flask
unzip flask.zip

sudo reboot

sudo systemctl restart nginx
sudo systemctl restart mysite


#서버와 개발 환경을 위한  config 분리
config
__init__.py
default.py
production.py
development.py

default.py
import os
BASE_DIR = os.path.dirname(os.path.dirname(__file__))


development.py
from config.default import *
SQLALCHEMY_DATABASE_URI='sqlite:///{}'.format(os.path.join(BASE_DIR,'security.db'))
SQLALCHEMY_TRACK_MODIFICATIONS=False
SECRET_KEY="dev"


production.py
from config.default import *
SQLALCHEMY_DATABASE_URI='sqlite:///{}'.format(os.path.join(BASE_DIR,'security.db'))
SQLALCHEMY_TRACK_MODIFICATIONS=False
SECRET_KEY="dev"

시크릿키 변경
python -c "import os;print(os.urandom(16))"

(mysite) c:\projects\flask>python -c "import os;print(os.urandom(16))"
b'\xd2\x046\xcbP4\xffV\xe1\xb7\x90\xef\x9f+_\xa5'


security안에 있는 __init__.py
app.config.from_envvar('APP_CONFIG_FILE')

mysite.cmd
@echo off
cd c:\projects/flask
set FLASK_APP=security
set FLASK_ENV=development
set APP_CONFIG_FILE=c:\projects\flask\config\development.py
c:\venvs\mysite\scripts\activate


set APP_CONFIG_FILE=C:\projects\flask\config\development.py