forked from p15670423/monkey
Merge pull request #62 from guardicore/bugfix/final-touches
Bugfix/final touches
This commit is contained in:
commit
ba35136a5f
|
@ -97,11 +97,11 @@ class ControlClient(object):
|
||||||
return {}
|
return {}
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def send_telemetry(tele_type='general', data=''):
|
def send_telemetry(telem_type, data):
|
||||||
if not WormConfiguration.current_server:
|
if not WormConfiguration.current_server:
|
||||||
return
|
return
|
||||||
try:
|
try:
|
||||||
telemetry = {'monkey_guid': GUID, 'telem_type': tele_type, 'data': data}
|
telemetry = {'monkey_guid': GUID, 'telem_type': telem_type, 'data': data}
|
||||||
reply = requests.post("https://%s/api/telemetry" % (WormConfiguration.current_server,),
|
reply = requests.post("https://%s/api/telemetry" % (WormConfiguration.current_server,),
|
||||||
data=json.dumps(telemetry),
|
data=json.dumps(telemetry),
|
||||||
headers={'content-type': 'application/json'},
|
headers={'content-type': 'application/json'},
|
||||||
|
|
|
@ -10,44 +10,61 @@ The monkey is composed of three separate parts.
|
||||||
1. Install python 2.7. Preferably you should use ActiveState Python which includes pywin32 built in.
|
1. Install python 2.7. Preferably you should use ActiveState Python which includes pywin32 built in.
|
||||||
You must use an up to date version, at least version 2.7.10
|
You must use an up to date version, at least version 2.7.10
|
||||||
https://www.python.org/download/releases/2.7/
|
https://www.python.org/download/releases/2.7/
|
||||||
If not using ActiveState, install pywin32, minimum build 219
|
2. Install pywin32 (if you didn't install ActiveState Python)
|
||||||
http://sourceforge.net/projects/pywin32/files/pywin32
|
Install pywin32, minimum build 219
|
||||||
3. a. install VCForPython27.msi
|
http://sourceforge.net/projects/pywin32/files/pywin32
|
||||||
https://aka.ms/vcpython27
|
3. Add python directories to PATH environment variable (if you didn't install ActiveState Python)
|
||||||
b. if not installed, install Microsoft Visual C++ 2010 SP1 Redistributable Package
|
a. Run the following command on a cmd console (Replace C:\Python27 with your python directory if it's different)
|
||||||
32bit: http://www.microsoft.com/en-us/download/details.aspx?id=8328
|
setx /M PATH "%PATH%;C:\Python27;C:\Pytohn27\Scripts
|
||||||
64bit: http://www.microsoft.com/en-us/download/details.aspx?id=13523
|
b. Close the console, make sure you execute all commands in a new cmd console from now on.
|
||||||
4. Download the dependent python packages using
|
4. Install pip
|
||||||
pip install -r requirements.txt
|
a. Download and run the pip installer
|
||||||
5. Download and extract UPX binary to [source-path]\monkey\chaos_monkey\bin\upx.exe:
|
https://bootstrap.pypa.io/get-pip.py
|
||||||
https://github.com/upx/upx/releases/download/v3.94/upx394w.zip
|
5. Install further dependencies
|
||||||
6. To build the final exe:
|
a. install VCForPython27.msi
|
||||||
cd [code location]/chaos_monkey
|
https://aka.ms/vcpython27
|
||||||
build_windows.bat
|
b. if not installed, install Microsoft Visual C++ 2010 SP1 Redistributable Package
|
||||||
output is placed under dist\monkey.exe
|
32bit: http://www.microsoft.com/en-us/download/details.aspx?id=8328
|
||||||
|
64bit: http://www.microsoft.com/en-us/download/details.aspx?id=13523
|
||||||
|
6. Download the dependent python packages using
|
||||||
|
pip install -r requirements.txt
|
||||||
|
7. Download and extract UPX binary to [source-path]\monkey\chaos_monkey\bin\upx.exe:
|
||||||
|
https://github.com/upx/upx/releases/download/v3.94/upx394w.zip
|
||||||
|
8. Build/Download Sambacry and Mimikatz binaries
|
||||||
|
a. Build/Download according to sections at the end of this readme.
|
||||||
|
b. Place the binaries under [code location]\chaos_monkey\bin
|
||||||
|
9. To build the final exe:
|
||||||
|
cd [code location]/chaos_monkey
|
||||||
|
build_windows.bat
|
||||||
|
output is placed under dist\monkey.exe
|
||||||
|
|
||||||
--- Linux ---
|
--- Linux ---
|
||||||
|
|
||||||
Tested on Ubuntu 16.04 and 17.04.
|
Tested on Ubuntu 16.04 and 17.04.
|
||||||
|
|
||||||
1. Run:
|
1. Install dependencies by running:
|
||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
sudo apt-get install python-pip python-dev libffi-dev upx libssl-dev libc++1
|
sudo apt-get install python-pip python-dev libffi-dev upx libssl-dev libc++1
|
||||||
Install the python packages listed in requirements.txt using pip
|
Install the python packages listed in requirements.txt using pip
|
||||||
pip install -r requirements.txt
|
cd [code location]/chaos_monkey
|
||||||
2. Place the source code in code/monkey/chaos_monkey
|
pip install -r requirements.txt
|
||||||
3. To build, run in terminal:
|
2. Build Sambacry binaries
|
||||||
cd [code location]/chaos_monkey
|
a. Build/Download according to sections at the end of this readme.
|
||||||
chmod +x build_linux.sh
|
b. Place the binaries under [code location]\chaos_monkey\bin
|
||||||
./build_linux.sh
|
3. To build, run in terminal:
|
||||||
output is placed under dist/monkey
|
cd [code location]/chaos_monkey
|
||||||
|
chmod +x build_linux.sh
|
||||||
|
./build_linux.sh
|
||||||
|
output is placed under dist/monkey
|
||||||
|
|
||||||
-- Sambacry --
|
-- Sambacry --
|
||||||
|
|
||||||
Sambacry requires two standalone binaries to execute remotely.
|
Sambacry requires two standalone binaries to execute remotely.
|
||||||
Compiling them requires gcc.
|
1. Install gcc-multilib if it's not installed
|
||||||
cd [code location]/chaos_monkey/monkey_utils/sambacry_monkey_runner
|
sudo apt-get install gcc-multilib
|
||||||
./build.sh
|
2. Build the binaries
|
||||||
|
cd [code location]/chaos_monkey/monkey_utils/sambacry_monkey_runner
|
||||||
|
./build.sh
|
||||||
|
|
||||||
-- Mimikatz --
|
-- Mimikatz --
|
||||||
|
|
||||||
|
|
|
@ -43,8 +43,12 @@ class Telemetry(flask_restful.Resource):
|
||||||
monkey = NodeService.get_monkey_by_guid(telemetry_json['monkey_guid'])
|
monkey = NodeService.get_monkey_by_guid(telemetry_json['monkey_guid'])
|
||||||
|
|
||||||
try:
|
try:
|
||||||
TELEM_PROCESS_DICT[telemetry_json.get('telem_type')](telemetry_json)
|
|
||||||
NodeService.update_monkey_modify_time(monkey["_id"])
|
NodeService.update_monkey_modify_time(monkey["_id"])
|
||||||
|
telem_type = telemetry_json.get('telem_type')
|
||||||
|
if telem_type in TELEM_PROCESS_DICT:
|
||||||
|
TELEM_PROCESS_DICT[telem_type](telemetry_json)
|
||||||
|
else:
|
||||||
|
print('Got unknown type of telemetry: %s' % telem_type)
|
||||||
except StandardError as ex:
|
except StandardError as ex:
|
||||||
print("Exception caught while processing telemetry: %s" % str(ex))
|
print("Exception caught while processing telemetry: %s" % str(ex))
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
|
@ -154,6 +158,10 @@ class Telemetry(flask_restful.Resource):
|
||||||
if 'ntlm_hash' in creds[user]:
|
if 'ntlm_hash' in creds[user]:
|
||||||
ConfigService.creds_add_ntlm_hash(creds[user]['ntlm_hash'])
|
ConfigService.creds_add_ntlm_hash(creds[user]['ntlm_hash'])
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def process_trace_telemetry(telemetry_json):
|
||||||
|
# Nothing to do
|
||||||
|
return
|
||||||
|
|
||||||
TELEM_PROCESS_DICT = \
|
TELEM_PROCESS_DICT = \
|
||||||
{
|
{
|
||||||
|
@ -162,4 +170,5 @@ TELEM_PROCESS_DICT = \
|
||||||
'exploit': Telemetry.process_exploit_telemetry,
|
'exploit': Telemetry.process_exploit_telemetry,
|
||||||
'scan': Telemetry.process_scan_telemetry,
|
'scan': Telemetry.process_scan_telemetry,
|
||||||
'system_info_collection': Telemetry.process_system_info_telemetry,
|
'system_info_collection': Telemetry.process_system_info_telemetry,
|
||||||
|
'trace': Telemetry.process_trace_telemetry
|
||||||
}
|
}
|
|
@ -14,9 +14,8 @@ import LicensePage from 'components/pages/LicensePage';
|
||||||
|
|
||||||
require('normalize.css/normalize.css');
|
require('normalize.css/normalize.css');
|
||||||
require('react-data-components/css/table-twbs.css');
|
require('react-data-components/css/table-twbs.css');
|
||||||
require('styles/App.css')
|
require('styles/App.css');
|
||||||
require('react-toggle/style.css');
|
require('react-toggle/style.css');
|
||||||
require('github-markdown-css/github-markdown.css');
|
|
||||||
|
|
||||||
let logoImage = require('../images/monkey-logo.png');
|
let logoImage = require('../images/monkey-logo.png');
|
||||||
let guardicoreLogoImage = require('../images/guardicore-logo.png');
|
let guardicoreLogoImage = require('../images/guardicore-logo.png');
|
||||||
|
|
|
@ -201,7 +201,7 @@ class PreviewPaneComponent extends React.Component {
|
||||||
info = this.scanInfo(this.props.item);
|
info = this.scanInfo(this.props.item);
|
||||||
break;
|
break;
|
||||||
case 'node':
|
case 'node':
|
||||||
info = this.props.item.group.includes('monkey') ?
|
info = this.props.item.group.includes('monkey', 'manual') ?
|
||||||
this.infectedAssetInfo(this.props.item) : this.assetInfo(this.props.item);
|
this.infectedAssetInfo(this.props.item) : this.assetInfo(this.props.item);
|
||||||
break;
|
break;
|
||||||
case 'island_edge':
|
case 'island_edge':
|
||||||
|
|
Loading…
Reference in New Issue