From 39578c7136a888051f60e0171fbb76c33386dd4c Mon Sep 17 00:00:00 2001 From: 0xricksanchez Date: Wed, 27 May 2020 08:06:10 +0200 Subject: [PATCH] Initial commit --- .gitignore | 211 ++ README.md | 155 +- SETUP.md | 83 + assets/334433.cast | 111 ++ assets/framework.png | Bin 0 -> 130283 bytes assets/stdout.png | Bin 0 -> 288367 bytes assets/stdout_old.png | Bin 0 -> 206636 bytes flake8.conf | 14 + src/Fuzzer/Fuzzer.py | 644 ++++++ src/Fuzzer/__init__.py | 0 src/Fuzzer/byte_flipper.py | 44 + src/Fuzzer/file_system_magic/__init__.py | 0 .../ext_superblock_parser.py | 237 +++ src/Fuzzer/file_system_magic/fs_util.py | 87 + .../ufs_superblock_parser.py | 379 ++++ .../file_system_magic/zfs_uberblock_parser.py | 138 ++ src/Fuzzer/metadata.py | 52 + src/Fuzzer/radamsa.py | 132 ++ src/Manager/Manager.py | 925 +++++++++ src/Manager/Manager_FreeBSD.py | 120 ++ src/Manager/Manager_NetBSD.py | 87 + src/Manager/Manager_OpenBSD.py | 93 + src/Manager/Manager_Ubuntu.py | 86 + src/Manager/__init__.py | 0 src/README.md | 196 ++ src/Requirements.sh | 56 + src/SnapshotTemplate/__init__.py | 0 src/SnapshotTemplate/snapshot.py | 9 + src/UserEmulation/UE_FreeBSD.py | 156 ++ src/UserEmulation/UE_Generic.py | 36 + src/UserEmulation/UE_NetBSD.py | 143 ++ src/UserEmulation/UE_OpenBSD.py | 143 ++ src/UserEmulation/UE_Ubuntu.py | 136 ++ src/UserEmulation/UE_all.py | 154 ++ src/UserEmulation/__init__.py | 0 src/Verifier/Crash_Verifier.py | 222 +++ src/Verifier/__init__.py | 0 src/__init__.py | 0 src/_deprecated/__init__.py | 0 src/_deprecated/makeFS.py | 940 +++++++++ src/config/__init__.py | 0 src/config/fuzzing_config.py | 21 + src/makeFS2.py | 895 +++++++++ src/run.py | 54 + src/scripts/fuzzer.sh | 13 + src/scripts/kern.diff | 204 ++ src/scripts/loader.conf | 1 + src/scripts/make_kern.sh | 4 + src/scripts/prepBSD_FSmakerVM.sh | 18 + src/scripts/prepBSD_fuzzVM.sh | 29 + src/scripts/prepLinux_VM.sh | 18 + src/scripts/rc.conf | 5 + src/scripts/sysctl.conf | 2 + src/utility/__init__.py | 0 src/utility/_unused/__init__.py | 0 src/utility/_unused/find_latest_core.py | 20 + src/utility/_unused/sha256sum.py | 34 + src/utility/extract_core_features.py | 58 + src/utility/file_traversal.py | 65 + src/utility/get_users_and_groups.py | 32 + src/utility/test_core.txt | 1740 +++++++++++++++++ src/utility/urls.py | 6 + src/utility/vmcore_remover.py | 19 + 63 files changed, 9026 insertions(+), 1 deletion(-) create mode 100644 .gitignore create mode 100644 SETUP.md create mode 100644 assets/334433.cast create mode 100644 assets/framework.png create mode 100644 assets/stdout.png create mode 100644 assets/stdout_old.png create mode 100644 flake8.conf create mode 100644 src/Fuzzer/Fuzzer.py create mode 100644 src/Fuzzer/__init__.py create mode 100644 src/Fuzzer/byte_flipper.py create mode 100644 src/Fuzzer/file_system_magic/__init__.py create mode 100644 src/Fuzzer/file_system_magic/ext_superblock_parser.py create mode 100644 src/Fuzzer/file_system_magic/fs_util.py create mode 100644 src/Fuzzer/file_system_magic/ufs_superblock_parser.py create mode 100644 src/Fuzzer/file_system_magic/zfs_uberblock_parser.py create mode 100644 src/Fuzzer/metadata.py create mode 100644 src/Fuzzer/radamsa.py create mode 100644 src/Manager/Manager.py create mode 100644 src/Manager/Manager_FreeBSD.py create mode 100644 src/Manager/Manager_NetBSD.py create mode 100644 src/Manager/Manager_OpenBSD.py create mode 100644 src/Manager/Manager_Ubuntu.py create mode 100644 src/Manager/__init__.py create mode 100644 src/README.md create mode 100755 src/Requirements.sh create mode 100644 src/SnapshotTemplate/__init__.py create mode 100644 src/SnapshotTemplate/snapshot.py create mode 100644 src/UserEmulation/UE_FreeBSD.py create mode 100644 src/UserEmulation/UE_Generic.py create mode 100644 src/UserEmulation/UE_NetBSD.py create mode 100644 src/UserEmulation/UE_OpenBSD.py create mode 100644 src/UserEmulation/UE_Ubuntu.py create mode 100644 src/UserEmulation/UE_all.py create mode 100644 src/UserEmulation/__init__.py create mode 100644 src/Verifier/Crash_Verifier.py create mode 100644 src/Verifier/__init__.py create mode 100644 src/__init__.py create mode 100644 src/_deprecated/__init__.py create mode 100644 src/_deprecated/makeFS.py create mode 100644 src/config/__init__.py create mode 100644 src/config/fuzzing_config.py create mode 100644 src/makeFS2.py create mode 100644 src/run.py create mode 100644 src/scripts/fuzzer.sh create mode 100644 src/scripts/kern.diff create mode 100644 src/scripts/loader.conf create mode 100755 src/scripts/make_kern.sh create mode 100755 src/scripts/prepBSD_FSmakerVM.sh create mode 100644 src/scripts/prepBSD_fuzzVM.sh create mode 100644 src/scripts/prepLinux_VM.sh create mode 100644 src/scripts/rc.conf create mode 100644 src/scripts/sysctl.conf create mode 100644 src/utility/__init__.py create mode 100644 src/utility/_unused/__init__.py create mode 100644 src/utility/_unused/find_latest_core.py create mode 100644 src/utility/_unused/sha256sum.py create mode 100755 src/utility/extract_core_features.py create mode 100644 src/utility/file_traversal.py create mode 100644 src/utility/get_users_and_groups.py create mode 100644 src/utility/test_core.txt create mode 100644 src/utility/urls.py create mode 100644 src/utility/vmcore_remover.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1c8a44a --- /dev/null +++ b/.gitignore @@ -0,0 +1,211 @@ + +# Created by https://www.gitignore.io/api/linux,python,pycharm+all +# Edit at https://www.gitignore.io/?templates=linux,python,pycharm+all + +### Linux ### +*~ + +# temporary files which can be created if a process still has a handle open of a deleted file +.fuse_hidden* + +# KDE directory preferences +.directory + +# Linux trash folder which might appear on any partition or disk +.Trash-* + +# .nfs files are created when an open file is removed but is still being accessed +.nfs* + +### PyCharm+all ### +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/modules.xml +# .idea/*.iml +# .idea/modules +# *.iml +# *.ipr + +# CMake +cmake-build-*/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format +*.iws + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# Editor-based Rest Client +.idea/httpRequests + +# Android studio 3.1+ serialized cache file +.idea/caches/build_file_checksums.ser + +### PyCharm+all Patch ### +# Ignores the whole .idea folder and all .iml files +# See https://github.com/joeblau/gitignore.io/issues/186 and https://github.com/joeblau/gitignore.io/issues/360 + +.idea/ + +# Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-249601023 + +*.iml +modules.xml +.idea/misc.xml +*.ipr + +# Sonarlint plugin +.idea/sonarlint + +### Python ### +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +pip-wheel-metadata/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +.hypothesis/ +.pytest_cache/ + +# Translations +*.mo +*.pot + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +# pyenv +.python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# celery beat schedule file +celerybeat-schedule + +# SageMath parsed files +*.sage.py + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# Mr Developer +.mr.developer.cfg +.project +.pydevproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# End of https://www.gitignore.io/api/linux,python,pycharm+all diff --git a/README.md b/README.md index a750be4..9d5e9ba 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,155 @@ -# FSFF +# FI(le) SY(stem) - FUZZer + + This is the full file system fuzzing framework that I presented at the Hack in the Box 2020 Lockdown Edition conference in April. + + * [Conference Talk](https://youtu.be/VNzKVOsn5qQ?t=17032) + * [Conference Material](https://github.com/0xricksanchez/HITB2020_FSFUZZER) + + +![Framework overview](assets/framework.png) + + +## Goal + +The goal of this framework is to uncover kernel security bugs on UNIX systems with a strong focus on BSD systems. +It was developed and heavily tested against FreeBSD, OpenBSD, and NetBSD but also already has some minor support for Linux based Hosts. +We were able to successfully uncover over 100 unique kernel bugs for UFS and EXT based file systems while also getting +a lot of insight into the recent addition of ZFS. + +### Test case generator + +The `makeFS2.py` can be used as a standalone utility to generate different valid file systems. +The usage is explained in detail in the [conference material repo](https://github.com/0xricksanchez/HITB2020_FSFUZZER) + +## Requirements + +The framework was solely tested on Ubuntu 18.04. +It relies on KVM, QEMU and libvirt. +The `Requirements.sh` sets up all necessary dependencies. +The framework may be fully functional on the latest Ubuntu 20.04 release. +Other non `apt` based host system should be easily supported and only requires minor changes in the `Requirements.sh`. +Once you're done with the requirements you can continue with the setup steps! + +## Setup + +Refer to the [SETUP.md](SETUP.md). If some steps are unclear please reach out! + +## Fuzz it! + +Starting the fuzzer only requires executing: `python3 run.py`. +Depending on your setup you may require `sudo` privileges. +When everything started successfully you can attach to the tmux fuzzing session via: + +``` +(sudo) tmux attach-session -t fsfuzzer +``` + +### Config + +The framework can be configured with the script `src/config/fuzzing_config.py`: + +```python + +# [fuzzing task specs] +# List of dictionaries specifying each fuzzing instance +fuzzer = [ + { + "name": "fuzz1", # Some name for internal bookkeeping + "fs_creator_vm": "genBox", # Name as specified in libvirt for the VM handling the file system generation, can be the same across all instances + "fuzzing_vm": "fuzzBox_0", # Name as specified in libvirt for the VM handling the file system generation + "mutation_engine": "radamsa, 0", # Mutation Engine that is to be used, and size of mutation (radamsa takes no size argument) + "target_fs": "ufs2", # Target file system + "target_size": 15, # Max file system size in Megabyte + "populate_with_files": 10, # Amount of file that will be generated + "max_file_size": 1024, # Maximum file size in bytes for each generated file + "enable_dyn_scaling": False, # Dynamic scaling will increase the filesystem size periodically + }, +] + +# [credentials] +# Credentials for the root user for the VMs +# It is expected that these are the same across all instances, but not necessarily root +user = "root" +pw = "root" +``` + +The available mutation engines are: + + - radamsa + - byte_flip_seq + - byte_flip_rnd + - metadata + +Dynamic scaling was initially implemented to test whether the size of a file system affects the possible crashes. +I was not able to identify a trigger value for file system size where crashes change, so this flag can stay disabled. +This also prevents suffering from a performance drop on longer runs as larger file systems take longer to mutate. + +The remaining config parameters should be self explanatory. + +### PoC + +The video below shows a quick demo where two fuzzing instances both targeting FreeBSD with a radamsa mutated UFS2 and a random bytes flipped EXT file system. +The mutated UFS file system directly leads to a crash showcasing how quickly you can crash a kernel. + +[![asciicast](https://asciinema.org/a/ABgNGFLU3TrUe4n7gOcduTrGk.svg)](https://asciinema.org/a/ABgNGFLU3TrUe4n7gOcduTrGk) + + +![fuzz_example](assets/stdout.png) + +## Feature set + +- [X] Full Support for FFS, UFS, EXT, and ZFS file systems +- [X] Full support for FreeBSD, NetBSD, and OpenBSD + - [X] Experimental support for Ubuntu (and probably other Debian based derivatives) +- [X] Mutations via + - [X] radamsa + - [X] global random byte flips + - [X] global random byte sequence changes + - [X] superblock only changes +- [X] Fully randomized user emulation to access/change broken but mounted file system +- [X] Crash database +- [X] Crash Verification +- [X] VM reset via snapshots +- [X] Fully automated fuzzing process +- [X] Reasonable user interface on the commandline + +## Future Work + +- [ ] Support more/different mutation engines +- [ ] Automated VM setup +- [ ] Check for available snapshots and if missing take some before fuzzing +- [ ] Support for macOS +- [ ] Performance tweaks + - [ ] Make framework async + - [ ] Continuous sample creation w/o waiting for fuzzing run + - [ ] Use same sample with different mutations before generating a new one + - [ ] Rework algorithms/interactions for speedup +- [ ] Code cleanup & refactoring + - [ ] Make logging verbosity togglable + + +## [Trophies](https://www.freshbsd.org/search?q=Christopher+Krah&sort=commit_date) + +With this setup I was able to find > 100 hundred unique kernel bugs in FreeBSD, NetBSD and OpenBSD for UFS and EXT based file systems. +Among these crashes I had a bunch of very interesting ones: + +- Out of bounds reads +- Out of bounds writes +- Double Fault in EXT +- Triple Fault in UFS +- Non-deterministic kernel bug with > 6 unique core dumps + +The majority of crashes were kernel DoS. +Furthermore, the majority of encountered crashes are still not fixed as of today (May 2020). +So have a go at finding kernel bugs in file system implementations :). + +## Disclaimer + +This whole thing was built with 'trust driven development', meaning that it grew way too large way too quick from a sole PoC idea. +Hence, there are no tests either and most likely a few bugs. +I'm sorry if you run into crashes (that are not kernel panic related) but feel free to make a PR or hit me up and I'll fix things ASAP! + +## Contact + +Twitter: [@0xricksanchez](https://twitter.com/0xricksanchez) diff --git a/SETUP.md b/SETUP.md new file mode 100644 index 0000000..894027a --- /dev/null +++ b/SETUP.md @@ -0,0 +1,83 @@ +Currently, the framework requires that the user sets up all necessary VMs with a fully functional `root:root` user by hand. + + +### VM installation +After installing all necessary dependencies this can be done as follows: + +``` +virt-install --name "my_vm" --memory 2047 --vcpus 2 --disk size=20 --cdrom ~/OS.iso --os-variant OS +``` + +Once the VM is installed you can verify it is available: + +``` +virsh list --all +``` + +To find out the IP you can: + +``` +virsh domifaddr my_vm +``` + + +To access a VNC windows of the running VM: + +``` +virt-viewer my_vm +``` + +### VM prep work - General + +Once you have a VM up and running access it either via VNC/SSH and prepare it for fuzzing. +Anyhow make sure *all* VMs are accessible via SSH and the `root:root` user +The basic framework setup currently expects one dedicated VM instance that handles the file system creation. + +### VM prep work - FS creator +This VM is needed for the sole reason of providing fresh new random file system samples for mutation on the Host. +To speed up the writing to disk I recommend having a TMPFS in place for this particular instance, e.g.: + +```bash +#!/usr/bin/env sh + +pkg install -y vim python2 e2fsprogs p7zip +kldload ext1fs +# Needs to be run as root on the FreeBSD VMs since we require root privs via ssh +sed -i -e 's/#PermitRootLogin no/PermitRootLogin yes/g' /etc/ssh/sshd_config +sed -i -e 's/#PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config +sed -i -e 's/#PermitEmptyPasswords no/PermitEmptyPasswords yes/g' /etc/ssh/sshd_config +/etc/rc.d/sshd restart + +echo "tmpfs_load='YES'" >> /boot/loader.conf +echo "tmpfs /tmp tmpfs rw,mode=1776 0 0" >> /etc/fstab +``` + +### VM prep work - Fuzzing instance +Now for the fuzzing instances the ssh requirement from above still holds. +The `scripts` folder contains all config parameters to tweak a fuzzing FreeBSD instance. +For proper fuzzing we extend the FreeBSD kernel with debugging functionality and also tweak some other parameters. +The procedure is pretty analogous for NetBSD and OpenBSD. +Creating a custom kernel and setting the correct flags under Linux requires a little bit more work and is not documented here. + +Once you fully prepared all the VMs you need to feed some information into the `config/fuzzing_config.py`. +There is already a fully documented example, which you can replace. + +**Note: ** You really only need to set up a single custom fuzzing instance as you can fully clone it via *libvirt* where it gets a new name and a new IP as well. + +``` +virt-clone --original current_instance --name new_instance --auto-clone +``` + + +### Finishing touches - Important! + +Once you have all the KVM VMs up and running and fully customized with new kernels and ssh access you have to take a snapshot of it. +The reason being that in case of the VM fully panicking beyond repair the framework will automatically try to reset the VM to +the latest available snapshot. + +``` +virsh snapshot-create-as --domain my_vm --name my_vm_snapshot +``` + + +When you have done all this you can start configuring the fuzzer framework in `src/config/fuzzing_config.py` and start fuzzing. \ No newline at end of file diff --git a/assets/334433.cast b/assets/334433.cast new file mode 100644 index 0000000..9ac58d2 --- /dev/null +++ b/assets/334433.cast @@ -0,0 +1,111 @@ +{"version": 2, "width": 115, "height": 61, "timestamp": 1590599289, "env": {"SHELL": "/usr/bin/zsh", "TERM": "xterm"}} +[0.169318, "o", "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r\u001b]2;dev@dev: ~/fisy-fuzz/src\u0007\u001b]1;~/fisy-fuzz/src\u0007"] +[0.182045, "o", "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[01;32mdev@dev \u001b[34m[07:08:09 PM] \u001b[00m\u001b[37m[~/fisy-fuzz/src]\u001b[00m \u001b[32m[master \u001b[31m*\u001b[32m]\u001b[00m\r\n\u001b[34m->\u001b[01;34m %\u001b[00m \u001b[K\u001b[?1h\u001b="] +[0.182146, "o", "\u001b[?2004h"] +[2.318476, "o", "s"] +[2.41199, "o", "\bsu"] +[2.50355, "o", "d"] +[2.647733, "o", "o"] +[3.27065, "o", " "] +[4.435704, "o", "p"] +[5.24657, "o", "ython3 run.py && sudo tmux attach-session -t fsfuzzer"] +[7.573557, "o", "\u001b[?1l\u001b>"] +[7.573842, "o", "\u001b[?2004l\r\r\n"] +[7.574712, "o", "\u001b]2;sudo python3 run.py && sudo tmux attach-session -t fsfuzzer\u0007\u001b]1;python3\u0007"] +[7.581332, "o", "[sudo] password for dev: "] +[10.066939, "o", "\r\n"] +[10.115497, "o", "error connecting to /tmp/tmux-0/default (No such file or directory)\r\n"] +[10.115835, "o", "python3 Fuzzer/Fuzzer.py fuzz1 hitb_manager hitb_fuzzer1 'radamsa, 0' ufs2 15 10 1024 False\r\n"] +[10.12091, "o", "python3 Fuzzer/Fuzzer.py fuzz2 hitb_manager hitbfuzzer0 'byte_flip_rnd, 10' ext2 15 10 1024 False\r\n"] +[10.121956, "o", "\u001b[6;30;42mAttach to tmux session via \"tmux attach-session -t fsfuzzer\"!\u001b[0m\r\n\u001b[6;30;42mCtrl+C to kill tmux session!\u001b[0m\r\n"] +[10.136289, "o", "\u001b[?1049h\u001b[22;0;0t\u001b[?1h\u001b=\u001b[H\u001b[2J\u001b[?12l\u001b[?25h\u001b[?1000l\u001b[?1002l\u001b[?1006l\u001b[?1005l\u001b[c\u001b(B\u001b[m\u001b[?12;25h\u001b[?12l\u001b[?25h\u001b[?1003l\u001b[?1006l\u001b[?2004l\u001b[1;1H\u001b[1;61r\u001b]112\u0007\u001b[2;1H"] +[10.136817, "o", "\u001b[?25l\u001b[Hpython3 Fuzzer/Fuzzer.py fuzz2 hitb_manager hitbfuzzer0 'byte_flip_rnd, 10' ext2 15 10 1024 False\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[30m\u001b[42m[fsfuzzer]0:bash- 1:bash* \"dev\" 19:08 27-May-20\u001b(B\u001b[m\u001b[2;1H\u001b[?12l\u001b[?25h"] +[10.136867, "o", "\u001b(B\u001b[m\u001b[?12;25h\u001b[?12l\u001b[?25h\u001b[?1003l\u001b[?1006l\u001b[?2004l\u001b[1;1H\u001b[1;61r\u001b[2;1H"] +[10.137387, "o", "\u001b[?25l\u001b[Hpython3 Fuzzer/Fuzzer.py fuzz2 hitb_manager hitbfuzzer0 'byte_flip_rnd, 10' ext2 15 10 1024 False\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[30m\u001b[42m[fsfuzzer]0:bash- 1:bash* \"dev\" 19:08 27-May-20\u001b(B\u001b[m\u001b[2;1H\u001b[?12l\u001b[?25h"] +[10.162321, "o", "root@dev:~/fisy-fuzz/src# "] +[10.162523, "o", "python3 Fuzzer/Fuzzer.py fuzz2 hitb_manager hitbfuzzer0 'byte_flip_rnd, 10' ext2 15 10 102\r24 False\r\n"] +[14.617284, "o", "\u001b[?25l\u001b[61d\u001b[30m\u001b[42m[fsfuzzer]0:python3- 1:python3* \"dev\" 19:08 27-May-20\u001b(B\u001b[m\u001b[4;1H\u001b[?12l\u001b[?25h"] +[16.862576, "o", "\u001b[1;60r\u001b[2;60r\u001b[59S\u001b[1;1H\u001b[K\u001b[1;61r\u001b[1;1H"] +[16.866343, "o", "───────────────────────────────────────────────────────────────────────────────────────────────────────────────────\u001b[2;1HStart date: 2020-05-27 19:08:20.08 | Runtime: 0:00:00.01 | OS : None | Mutation engine: byte_flip_rnd\r\nFilesystem type: ext2 | Filesystem size: 15MB \r\nIteration: 0 | Last iteration time: 0s | Avg. iteration time: 0s\r\n#Crashes: 0 | #New crashes: 0 | Last panic: | Last new crash (iter): 0\r\nSuccessful mounts: 0 (0%) | 0/0 (0%) Commands executed\r\n"] +[16.868912, "o", "───────────────────────────────────────────────────────────────────────────────────────────────────────────────────\u001b[8;1H"] +[17.478383, "o", "\u001b[31m[!] Mounting failed!\r\n\u001b(B\u001b[m"] +[17.602113, "o", "───────────────────────────────────────────────────────────────────────────────────────────────────────────────────\u001b[10;1H"] +[18.618083, "o", "\u001b[?25l\u001b[H───────────────────────────────────────────────────────────────────────────────────────────────────────────────────\u001b[2;1HStart date: 2020-05-27 19:08:20.08 | Runtime: 0:00:00.01 | OS : None | Mutation engine: radamsa\u001b[K\r\nFilesystem type: ufs2 | Filesystem size: 15MB\u001b[K\r\nIteration: 0 | Last iteration time: 0s | Avg. iteration time: 0s\u001b[K\r\n#Crashes: 0 | #New crashes: 0 | Last panic: | Last new crash (iter): 0\u001b[K\r\nSuccessful mounts: 0 (0%) | 0/0 (0%) Commands executed\u001b[K\r\n───────────────────────────────────────────────────────────────────────────────────────────────────────"] +[18.618273, "o", "────────────\u001b[8;1H\u001b[31m[!] Mounting failed!\u001b[39m\u001b[K\r\n───────────────────────────────────────────────────────────────────────────────────────────────────────────────────\u001b[10;1H\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[30m\u001b[42m[fsfuzzer]0:python3* 1:python3- \"dev\" 19:08 27-May-20\u001b(B\u001b[m\u001b[10;1H\u001b[?12l\u001b[?25h"] +[19.33766, "o", "\u001b[1;60r\u001b[2;60r\u001b[59S\u001b[1;1H\u001b[K\u001b[1;61r\u001b[1;1H"] +[19.340421, "o", "───────────────────────────────────────────────────────────────────────────────────────────────────────────────────\u001b[2;1HStart date: 2020-05-27 19:08:20.08 | Runtime: 0:00:04.75 | OS : freebsd | Mutation engine: radamsa\r\nFilesystem type: ufs2 | Filesystem size: 15MB \r\nIteration: 1 | Last iteration time: 4.63s | Avg. iteration time: 4.63s\r\n#Crashes: 0 | #New crashes: 0 | Last panic: | Last new crash (iter): 0\r\nSuccessful mounts: 0 (0.0%) | 0/0 (0%) Commands executed\r\n"] +[19.342673, "o", "───────────────────────────────────────────────────────────────────────────────────────────────────────────────────\u001b[8;1H"] +[19.920455, "o", "\u001b[32m[+] VM status: OK\r\n[+] Mounting successful!\r\n\u001b(B\u001b[m"] +[19.920622, "o", "\u001b[8C\u001b[33m\u001b[1m[*] Accessing & modifying mounted filesystem: /mnt/radamsa_fuzz1_ufs2_15MB\r\n\u001b(B\u001b[m"] +[20.284001, "o", "\u001b[8C > Failed to perform a file traversal on mounted file system\u001b[12;9H > Starting backup user emulation that only attempts to write to disk...\r\n"] +[33.389233, "o", "\u001b[31m[!] VM status: Not Responding\r\n\u001b(B\u001b[m"] +[33.38938, "o", "\u001b[33m\u001b[1m[*] Completed 0/12 program calls\r\n\u001b(B\u001b[m"] +[33.575239, "o", "\u001b[33m\u001b[1m[*] Checking for crash dump..!\r\n\u001b(B\u001b[m"] +[33.576477, "o", "\u001b[8C\u001b[33m\u001b[1m[*] Please stand by..\u001b(B\u001b[m"] +[34.57778, "o", "\u001b[33m\u001b[1m.\u001b(B\u001b[m"] +[35.578814, "o", "\u001b[33m\u001b[1m.\u001b(B\u001b[m"] +[36.579819, "o", "\u001b[33m\u001b[1m.\u001b(B\u001b[m"] +[37.580818, "o", "\u001b[33m\u001b[1m.\u001b(B\u001b[m"] +[38.581833, "o", "\u001b[33m\u001b[1m.\u001b(B\u001b[m"] +[39.582874, "o", "\u001b[33m\u001b[1m.\u001b(B\u001b[m"] +[40.584021, "o", "\u001b[33m\u001b[1m.\u001b(B\u001b[m"] +[41.584956, "o", "\u001b[33m\u001b[1m.\u001b(B\u001b[m"] +[42.585997, "o", "\u001b[33m\u001b[1m.\u001b(B\u001b[m"] +[43.417584, "o", "\u001b[?25l\u001b[H───────────────────────────────────────────────────────────────────────────────────────────────────────────────────\u001b[2;1HStart date: 2020-05-27 19:08:20.08 | Runtime: 0:00:26.16 | OS : freebsd | Mutation engine: byte_flip_rnd\u001b[K\r\nFilesystem type: ext2 | Filesystem size: 15MB\u001b[K\r\nIteration: 4 | Last iteration time: 5.94s | Avg. iteration time: 6.44s\u001b[K\r\n#Crashes: 0 | #New crashes: 0 | Last panic: | Last new crash (iter): 0\u001b[K\r\nSuccessful mounts: 0 (0.0%) | 0/0 (0%) Commands executed\u001b[K\r\n─────────────────────────────────────────────────────────────────────────────────────────────────"] +[43.417652, "o", "──────────────────\u001b[8;1H\u001b[31m[!] Mounting failed!\u001b[39m\u001b[K\r\n───────────────────────────────────────────────────────────────────────────────────────────────────────────────────\u001b[10;1H\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[30m\u001b[42m[fsfuzzer]0:python3- 1:python3* \"dev\" 19:08 27-May-20\u001b(B\u001b[m\u001b[10;1H\u001b[?12l\u001b[?25h"] +[44.545871, "o", "\u001b[?25l\u001b[H───────────────────────────────────────────────────────────────────────────────────────────────────────────────────\u001b[2;1HStart date: 2020-05-27 19:08:20.08 | Runtime: 0:00:04.75 | OS : freebsd | Mutation engine: radamsa\u001b[K\r\nFilesystem type: ufs2 | Filesystem size: 15MB\u001b[K\r\nIteration: 1 | Last iteration time: 4.63s | Avg. iteration time: 4.63s\u001b[K\r\n#Crashes: 0 | #New crashes: 0 | Last panic: | Last new crash (iter): 0\u001b[K\r\nSuccessful mounts: 0 (0.0%) | 0/0 (0%) Commands executed\u001b[K\r\n───────────────────────────────────────────────────────────────────────────────────────────────────"] +[44.546024, "o", "────────────────\u001b[8;1H\u001b[32m[+] VM status: OK\u001b[39m\u001b[K\r\n\u001b[32m[+] Mounting successful!\u001b[39m\u001b[K\r\n \u001b[33m\u001b[1m[*] Accessing & modifying mounted filesystem: /mnt/radamsa_fuzz1_ufs2_15MB\u001b(B\u001b[m\u001b[K\r\n > Failed to perform a file traversal on mounted file system\u001b[K\r\n > Starting backup user emulation that only attempts to write to disk...\u001b[K\r\n\u001b[31m[!] VM status: Not Responding\u001b[39m\u001b[K\r\n\u001b[33m\u001b[1m[*] Completed 0/12 program calls\u001b(B\u001b[m\u001b[K\r\n\u001b[33m\u001b[1m[*] Checking for crash dump..!\u001b(B\u001b[m\u001b[K\r\n \u001b[33m\u001b[1m[*] Please stand by............\u001b(B\u001b[m\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[30m\u001b[42m[fsfuzzer]0:python3* 1:python3- \"dev\" 19:08 27-May-20\u001b(B\u001b[m\u001b[16;40H\u001b[?12l\u001b[?25h"] +[44.588034, "o", "\u001b[33m\u001b[1m.\u001b(B\u001b[m"] +[45.589231, "o", "\u001b[33m\u001b[1m.\u001b(B\u001b[m"] +[46.589808, "o", "\u001b[33m\u001b[1m.\u001b(B\u001b[m"] +[47.590828, "o", "\u001b[33m\u001b[1m.\u001b(B\u001b[m"] +[48.59209, "o", "\u001b[33m\u001b[1m.\u001b(B\u001b[m"] +[49.592898, "o", "\u001b[33m\u001b[1m.\u001b(B\u001b[m"] +[50.59385, "o", "\u001b[33m\u001b[1m.\u001b(B\u001b[m"] +[51.594932, "o", "\u001b[33m\u001b[1m.\u001b(B\u001b[m"] +[52.595075, "o", "\u001b[33m\u001b[1m.\u001b(B\u001b[m"] +[53.596119, "o", "\u001b[33m\u001b[1m.\u001b(B\u001b[m"] +[54.597228, "o", "\u001b[33m\u001b[1m.\u001b(B\u001b[m"] +[55.13557, "o", "\u001b[?25l\u001b[61;1H\u001b[30m\u001b[42m[fsfuzzer]0:python3* 1:python3- \"dev\" 19:09 27-May-20\u001b(B\u001b[m\u001b[16;51H\u001b[?12l\u001b[?25h"] +[55.598208, "o", "\u001b[33m\u001b[1m.\u001b(B\u001b[m"] +[56.599349, "o", "\u001b[33m\u001b[1m.\u001b(B\u001b[m"] +[57.600399, "o", "\u001b[33m\u001b[1m.\u001b(B\u001b[m"] +[58.014886, "o", "\u001b[?25l\u001b[H───────────────────────────────────────────────────────────────────────────────────────────────────────────────────\u001b[2;1HStart date: 2020-05-27 19:08:20.08 | Runtime: 0:00:38.12 | OS : freebsd | Mutation engine: byte_flip_rnd\u001b[K\r\nFilesystem type: ext2 | Filesystem size: 15MB\u001b[K\r\nIteration: 6 | Last iteration time: 5.76s | Avg. iteration time: 6.25s\u001b[K\r\n#Crashes: 0 | #New crashes: 0 | Last panic: | Last new crash (iter): 0\u001b[K\r\nSuccessful mounts: 0 (0.0%) | 0/0 (0%) Commands executed\u001b[K\r\n─────────────────────────────────────────────────────────────────────────────────────────────────"] +[58.015112, "o", "──────────────────\u001b[8;1H\u001b[31m[!] Mounting failed!\u001b[39m\u001b[K\r\n───────────────────────────────────────────────────────────────────────────────────────────────────────────────────\u001b[10;1H\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[30m\u001b[42m[fsfuzzer]0:python3- 1:python3* \"dev\" 19:09 27-May-20\u001b(B\u001b[m\u001b[10;1H\u001b[?12l\u001b[?25h"] +[60.132365, "o", "\u001b[1;60r\u001b[2;60r\u001b[59S\u001b[1;1H\u001b[K\u001b[1;61r\u001b[1;1H"] +[60.134927, "o", "───────────────────────────────────────────────────────────────────────────────────────────────────────────────────\u001b[2;1HStart date: 2020-05-27 19:08:20.08 | Runtime: 0:00:44.29 | OS : freebsd | Mutation engine: byte_flip_rnd\r\nFilesystem type: ext2 | Filesystem size: 15MB \r\nIteration: 7 | Last iteration time: 6.07s | Avg. iteration time: 6.22s\r\n#Crashes: 0 | #New crashes: 0 | Last panic: | Last new crash (iter): 0\r\nSuccessful mounts: 0 (0.0%) | 0/0 (0%) Commands executed\r\n"] +[60.137464, "o", "───────────────────────────────────────────────────────────────────────────────────────────────────────────────────\u001b[8;1H"] +[60.722648, "o", "\u001b[31m[!] Mounting failed!\r\n\u001b(B\u001b[m"] +[60.837507, "o", "───────────────────────────────────────────────────────────────────────────────────────────────────────────────────\u001b[10;1H"] +[61.447128, "o", "\u001b[?25l\u001b[H───────────────────────────────────────────────────────────────────────────────────────────────────────────────────\u001b[2;1HStart date: 2020-05-27 19:08:20.08 | Runtime: 0:00:04.75 | OS : freebsd | Mutation engine: radamsa\u001b[K\r\nFilesystem type: ufs2 | Filesystem size: 15MB\u001b[K\r\nIteration: 1 | Last iteration time: 4.63s | Avg. iteration time: 4.63s\u001b[K\r\n#Crashes: 0 | #New crashes: 0 | Last panic: | Last new crash (iter): 0\u001b[K\r\nSuccessful mounts: 0 (0.0%) | 0/0 (0%) Commands executed\u001b[K\r\n───────────────────────────────────────────────────────────────────────────────────────────────────"] +[61.447291, "o", "────────────────\u001b[8;1H\u001b[32m[+] VM status: OK\u001b[39m\u001b[K\r\n\u001b[32m[+] Mounting successful!\u001b[39m\u001b[K\r\n \u001b[33m\u001b[1m[*] Accessing & modifying mounted filesystem: /mnt/radamsa_fuzz1_ufs2_15MB\u001b(B\u001b[m\u001b[K\r\n > Failed to perform a file traversal on mounted file system\u001b[K\r\n > Starting backup user emulation that only attempts to write to disk...\u001b[K\r\n\u001b[31m[!] VM status: Not Responding\u001b[39m\u001b[K\r\n\u001b[33m\u001b[1m[*] Completed 0/12 program calls\u001b(B\u001b[m\u001b[K\r\n\u001b[33m\u001b[1m[*] Checking for crash dump..!\u001b(B\u001b[m\u001b[K\r\n \u001b[33m\u001b[1m[*] Please stand by.............................\u001b(B\u001b[m\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[30m\u001b[42m[fsfuzzer]0:python3* 1:python3- \"dev\" 19:09 27-May-20\u001b(B\u001b[m\u001b[16;57H\u001b[?12l\u001b[?25h"] +[61.60453, "o", "\u001b[33m\u001b[1m.\u001b(B\u001b[m"] +[62.605669, "o", "\u001b[33m\u001b[1m.\u001b(B\u001b[m"] +[63.606733, "o", "\u001b[33m\u001b[1m.\u001b(B\u001b[m"] +[64.607785, "o", "\u001b[33m\u001b[1m.\u001b(B\u001b[m"] +[65.608805, "o", "\u001b[33m\u001b[1m.\u001b(B\u001b[m"] +[66.609917, "o", "\u001b[33m\u001b[1m.\u001b(B\u001b[m"] +[67.610851, "o", "\u001b[33m\u001b[1m.\u001b(B\u001b[m"] +[68.612011, "o", "\u001b[33m\u001b[1m.\u001b(B\u001b[m"] +[69.61308, "o", "\u001b[33m\u001b[1m.\u001b(B\u001b[m"] +[70.614132, "o", "\u001b[33m\u001b[1m.\u001b(B\u001b[m"] +[71.615242, "o", "\u001b[33m\u001b[1m.\u001b(B\u001b[m"] +[72.616308, "o", "\u001b[33m\u001b[1m.\u001b(B\u001b[m"] +[73.621209, "o", "\r\n"] +[82.383551, "o", "\u001b[8C\u001b[33m\u001b[1m[*] Found core file\r\n\u001b(B\u001b[m"] +[82.607434, "o", "\u001b[36m[+] New unseen crash found: d2f866e87424d46871c0df72b78f7b3bc6934123b24b2036f5f3f0101f613db8!\r\n\u001b(B\u001b[m"] +[85.581697, "o", "───────────────────────────────────────────────────────────────────────────────────────────────────────────────────\u001b[20;1H"] +[89.424818, "o", "\u001b[1;60r\u001b[2;60r\u001b[59S\u001b[1;1H\u001b[K\u001b[1;61r\u001b[1;1H"] +[89.427779, "o", "───────────────────────────────────────────────────────────────────────────────────────────────────────────────────\u001b[2;1H"] +[89.427912, "o", "Start date: 2020-05-27 19:08:20.08 | Runtime: 0:01:14.92 | OS : freebsd | Mutation engine: radamsa\r\nFilesystem type: ufs2 | Filesystem size: 15MB \r\nIteration: 2 | Last iteration time: 70.16s | Avg. iteration time: 37.39s\r\n#Crashes: 1 | #New crashes: 1 | Last panic: ufs_dirbad | Last new crash (iter): 1\r\nSuccessful mounts: 1 (50.0%) | 0/12 (0.0%) Commands executed\r\n"] +[89.430231, "o", "───────────────────────────────────────────────────────────────────────────────────────────────────────────────────\u001b[8;1H"] +[90.057182, "o", "\u001b[31m[!] Mounting failed!\r\n\u001b(B\u001b[m"] +[90.178817, "o", "───────────────────────────────────────────────────────────────────────────────────────────────────────────────────\u001b[10;1H"] +[91.472826, "o", "\u001b[1;61r\u001b(B\u001b[m\u001b[?1l\u001b>\u001b[H\u001b[2J\u001b]112\u0007"] +[91.472978, "o", "\u001b[?12l\u001b[?25h\u001b[?1000l\u001b[?1002l\u001b[?1006l\u001b[?1005l\u001b[?1049l\u001b[23;0;0t[detached (from session fsfuzzer)]\r\n"] +[91.473899, "o", "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r"] +[91.474017, "o", "\u001b]2;dev@dev: ~/fisy-fuzz/src\u0007"] +[91.474466, "o", "\u001b]1;~/fisy-fuzz/src\u0007"] +[91.483022, "o", "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[01;32mdev@dev \u001b[34m[07:09:40 PM] \u001b[00m\u001b[37m[~/fisy-fuzz/src]\u001b[00m \u001b[32m[master \u001b[31m*\u001b[32m]\u001b[00m\r\n\u001b[34m->\u001b[01;34m %\u001b[00m \u001b[K"] +[91.483175, "o", "\u001b[?1h\u001b=\u001b[?2004h"] +[94.061336, "o", "\u001b[?2004l\r\r\n"] diff --git a/assets/framework.png b/assets/framework.png new file mode 100644 index 0000000000000000000000000000000000000000..193fcff96c2477d59e262e3dd5792566674d2dae GIT binary patch literal 130283 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
    lcf)WQM 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
    7#LkdNo!AlO{KCcl4+#WM}mp=Vqsy$~B%1 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 Qy0|J)QP6-FKQIsaAN;xYDF6Tf literal 0 HcmV?d00001 diff --git a/assets/stdout.png b/assets/stdout.png new file mode 100644 index 0000000000000000000000000000000000000000..7fdee2dda3a9b91bff9be6278ec87f281ee14d64 GIT binary patch literal 288367 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≻Cmwof9HOi7hh!{fxqAB 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

    3W4UqNddT4;7gqM(bzbYhJ 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 v!`<= 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

    86B6qNRaS0` zqpT`vxoiGciaxRI%K$Jvt0hOfK?;Fg3@pqS<7~y`{Qs;VAkrtkqDn)Sk?y6tND_K1 z>~rQ~B4vFVGY=bAnfDZXsT*To2BNq;AgPWNu+x|pi)}CjX@CI4uwtg6DAp;%A!+M1 z*8_&In6qi!nb9;Q4nBRWZOu^GMhHKVmo;N>P5_x+P)O8GI^g8h7PZj3r6DKaAlzdJ zenwyVrJYMonyHQ7`nF%+6%LufD+vrSxljF$QDiwxpAl3MR27E)!19QQ@~tQsl~y4^ z)%}88P{2>Rm4ooZTRoDMJ=h%yw!K`T4ajiw<&bh7RQJ?IT2#i;ex1wX)AvyKc zqSP98Pw6k6(+z1W^v_iI$zdqRUt1OV!|;NQojGZ@z8G4b3cXgBduXQ-F$&ns?eKpO zhp!$i&FhExy#%biHwpmm^lagpHdf7@K2VrG005A)V#d^093d(Z(R;@fzkINCOusWb z8(N(Ry;Yn0Sqp#JvgTD4SSV+OpJ;TB$d=}%A?8>e;qXiKp%?3s@Ve&cABN{CAHvIO zLaz@Q_{|Ox4jQnl?wC-#pxrsXzql|98Oz=l55MGn>j+~E87q4GxZ;JK?(zM_gWkSrxroZq%St`7aVv2;PV`?)Rvh@?ZXGhW_tW6V-O zG8L|`k8u-H2A1DlZyK3^mDUYuR)Bq=m}mSEAdCdp%JmFmlMB@1b!mNCiiK#siXCH6 zQ9P6W^swO%s-aGcYKDsvCUy-5*XAo ztSl}ufJKu0!C*N``K2{Q{Hb0!xQ_r|ZER@LLMf}Eh6Di1X%A~6>~57`HAHT^7(jSo zl?I^Ff%>eaHMlcjNmiK}EZaiP902%EV5C;{Ndh(4LgPvc0xq9YcXD4W|M8P7PyS69 zViKxS;^Y(D$d_AmZa~OuxDc__(1=L@RK>tZ8i|DfW{_pjjr>QleBK+}zI@kZ+R8($ zi@~R)RueYzi`$G~^srFfkg$lI>1Zm_dpJXlgS0?|P37DajSv|v-@Re#3qaBv1G9W$ z8NgJfJY_^;=p}N`Q!#8tFwg=Bp5Zerbg*5j6jJu|DJ*_PAsE(vBKbByyei`B4=kY9 z03du%i&RJYz?RC zBfXa!`=-7MKtCfac887Vh%0+a?xT1Wf2>XYao>y0qKYek7}#0mx=i4^zUdfMEKh=WFy+0Xndb}9vdswSD(HNvl2l7}$q@VyQ;pa?bA7R3uAy?r@;|r@%0%4_W`K(r82d)MgYkSq4oW)$V8G{!K&DrbQ8;6W)&$}r`a%ta*-@VxYZ4FE9r zs2L57!-tO?-8giZx9Y3xKKDw>$^UT&07Sn&8G70JFp0?d4|@2JR7W!h~Nw@G7+ph7eSt9mgFc>_B!-?gb3irfQ#_ zeZ(>_ME6663`PYfe#}sOgkPO-HUzPL%J1KqV&Dg5mjxf;fkD!LQeFB_`5p|$2!Rk0 zV3Uv_F3a==H%{7y6ATz!kRn|GFZuOO%6V^bWJlltG^UAGo^*!{!JOzw#f_B6%ejH6 zhS-H7kCbLC607h`Y9lGV@P=yYa#R47l!_bCfl`bS$B5d3&n&(Z#aPl0BYe!KQAplf zNzyAqm0;2D5))|=1|3t}c-|{IK|ZP)E!q!HOfUni4K)*=fY{JS>3t~`|8n~xHucg| z6Yoq&`XOfSU1%O??#T^=v~d*UTs|(6N_)Yp%U)KcnALzQ0S|xKF~F*zlo=pmY%GKX zvalgzQKS(m8{W0aJK73B)B-?A(ZuZFPV z?UYTDLIdoba>W3Ekx0cM}W$O7WToy<$R`tE}9H z1X^DIZn-DJ;!w#T*>aXqA<7vJC}%EFXf+#(w! zH-gxcpCriR0S2w3>!T#V6bT$C5@M&yFNsj>|DkUh>iGp;`duWVYI3+(XOv6!t2&kej4QAibR;cvcoe;nv z!M1SB`L{jzo}N!rkaQ(b#$zWipY~9iSKOV?IOlKJ2R61hS3xf1&dfM-)8W4lK^7#s>mIxUG1C5md5YKyMJH$Ps9=>TIAGu9$NIEAsL9dd8isLOz{)D)@P1rT`ag^p7-iWuMlAiJGbw%Z^QJ@7^S_W1HBCQf;j`)}blQySTdEsUMs|)^6k!o zN(e(veR5FG(&PY7%s}C+WU74hR7Bq7!u(tL*Ys(v%y&rPfOcNLf?|jSkorWk97d@V zJC=40lHDF=SQ?f(RDU)eu2J?c!h(}P2rZI=OG`1-T9Z5CD}{K#p|MqA{jxRXIO_-DGhg_K}W z!=GLH0cTy5m2m|&`y+<(pvs632`p~&cg#v{9#Bgr2nC@nz52qWd*ZjMsTn7dL&nbI zi?8((t_&y`J!G)|5f2Su$*Y-51x`;z9;s4Wws=OZY)|YV>B2QS2AQ2~2>=26I5tTl z#JZR(le~u}00-q3LSTa>Om+!|Du^J4D8EpTj0P%B5J)2eZ08fu=-#Mn<{M=mF=Z1k z4E9HO%=kseK%qe=KSyxO@Viivf+Ebqf5gyH~;5 z9Fr3aLwLaHG*uC-xq`)K<)l%-Fw>3(q0WjeERQ9I(5gh~wBF)^9*DTs!ASV8!@{rB z4-N&X0@CgnI%Rd_yjN_dnin5hw6MtlvkV9WV(bQ%XRu_dDoQtmql_#l5yesk@@XO` zWqC|YGo&s=`^cgy<)HvcjCEvPSEr~wqlOViSg5Xa!NM%Y8J4jKV<)FH6|h>TRHCh1 zG$K2)&q~3|6`6lh5e-y@#8=uQsKYKc_hz)EF|Ht7@$HRUPGN_$5WjoCk=%;@(ey*< zfJG(rh2-L%e-SF9TOnPumdNM6p&)Y=1!wFtmV(wWovXNSle;Z5LI&1h7OJon6EPqc zoVIC;uv~&3R%9xDQTBt3pah6l zst9970#*kJi%oRTCl^Wi_!T?oD}T5XDY2F~9ij_`SPu)MqXnYo2-bL4?w~RUDNMl| z>(jj?fwslF=~1ddF!w2J0uMycrv?HKtFpO}U`hF80i#(>Kt##)G+K_Gd~BI=SJ?u_ zp{ezSfI*>BF)U`AIH)4(NWj`lV4-aE?L+7Sg1LnCU1M5&h3R7iI)@azOs1aywdh;K ziEE>~Mdf!~C|aaOcye?m5<;I2f~9OGOj@$0kcD_orCPCCCdvafElWPWJ_$>}XR_b0ljNlPBWO%@9n`J!~?8A597#b}11hJD$m6@wEo^x92Tw#@Pz$zM(APsS2T6^qk~hio5?(0BH@q|M2;)t;-@1I*@?jVZJW5(Mz} zacHqJQifa(=hZHaSn$;+1cH7MhZ1Z&5r54I5{0Eqt1?fKNP>d3PL~u&8hg;8s76u# zRTf16WhBU%A+EWMhlslGGO_&N3Nlbl#!lMngAGl5_d*dTO=U}tE5{F+5eX<-st+KXl@SqU1EX<}tU5D4V(5@%X5!IY z0Rgoy?}5f>&O}qP#0QSWBN|i{F+XV#P-nf!l?5^JkwNU8#w-_3YSS?CKXi~xsXldO zbQ*-7{}gK?0e?huX(Thp=n4gSRgeQFeriYrvH++_j}I$^?FQI1vXvGjpyv<7U_3#< zT&4>td|-hMrjsgSw9XJ!0uTGhnaavT%2_)P35L?)ni5Ja1o9$8% zlm*<|u0_sY`V}&avi1?`*y^`|9);Z|GRv1r#6=r;Nd=4md|>LgjRT>WCdHuHwjBG(72Go7x5!@#f(wH_H%~VnEAs^`PiFHxmIVNqedm$# zgyDc#SAwrFZDteDrWmkK^>SWoPC}yC?7Mgklg%*VQCTrY0Rd&uPTL;>HvQz+^s#u~ z&)YNeRu)g0`53c_Tj^ z&{COeVS%-RQ^X>l%{-Ou8^2aL>lYm;=VD}|VO;I?S!guf!%E!(%il4b zIl?r6-~o$gH4OwBEPCA1>w>MOgvo8T=2vSC+371AqM77`F( z+Djt|HbyoluVB%lEKTc!oCC6F{7kH14GgDHL|=nJy;Tu^r`9n=8~)h zA>7Zhn~LxW-1g2XkiZhtpO)`;PgPn>4oA8}vtPA>Org=HG3k?>DB|XbVJ=tT~zP`cs)wP5~H_ z$U?wvmiAoOY>YsB;gx6OnA94U8aOCKfr;npg~yB}*?aK3*BH90^Z?t+%InirXslJ% zu#`DV#ar62Ey_F@+5nWw8aJL=CGkx}vY%<;GEc zr;E8)K9)S>5rRi;K92r_WdRVy1RMJkLO_;1il*9!DU9usp6a?S7*PL_l0;Uk5Hu|M z-diO70gw)#DQ6jg-s47H+`y{zjX>Bx8HAJURLqvt>&g&d$dq6Zhp3_=ta7j&GW3>V zOYY!Q$CrA6ccy2GbMSx(yk~zr4wXYo!CdgPo-4xOtqX};GUZ*(Sh?T;JPf7?0+LtN9J1V2pxRIn11?~X+23F>7wr)SZS=IR zM8hCq=&SOCsYD0-YzJ3WY?2s50%v5Ic0<*2Ik3Qz6`=FlNTbSBkb;)hl}{1*9o)p% zz9M$`D)7~C{=l(f8|4nL08^n-`Kf5Gc~F&_!m?ZtiW(eb&<2n)TLj3mm}dFCN*amM zt_Y*xQUtvX3U7i(uoB`-P%Hfz2*|Lc6BMxf;EDkk3dLNm5O-X8!b9W}_I*-GF(1ZP zeZl$!E9BotLgaRF|7nts~|8MTrned zxVy3|?2(BgDyKM=Kx00T$P6psxm8~`5eOAav87Ou&=&x=#EOxm?M013QZ1xa246>H zj(Ut(Q^ioa5TMKOkbsbZ4rZLZ|A87Rfe#9B{+nST7EUA=zQYL#4U`2+t#V}109|8N z+D$*pS>a6q!vI7oDSqh=^YNmEsSKpnQ11~TD`bZw5xVLtI3{NLm6Xu8b0IoJ z;x}^jI6{mg)zAci+$n#IIdI&%svn<7wOb!Tc(p}Gl}846usk*fK5at0F1j8;0t z@)X2j6}`DXxr7<~9U6!WBnWObsD}Vv%Hfa?6k(ex#x8b2<`80@3FEu(-7|U0Ku3G{ z+V4)nfauO<9!3Zdq}jz(ZRsmtJJi&aP1ZP;1s(0-YrZqlh!0=U0BI@1OuIkbNcazn zTQJSahy(>xdh`|s4a2|!*1;BW|Cm1kI+kKlO`Newpa9%;&+f^SvmNc>?_V>e0;G9K zrAk*`bzoLgHkmAu(F}q>5gRimf8PT;#V2>%GU1a?Vj4MEBn2V5!vF#O;t}=&X|D>F zMlZNvQcL#O{2wvq(d}!1C{i@UZghks52@`<6d(yz#dym=p4yYLM4%vvRFI+rQvzHN zWGc9j(_)DBj=2rd5JmbApKtJ0<(eBPhLKhMyQ8Y1ZBBH~suD z=CV>|x3!E4by41`IN$m-xZ)qV$h|4`nB79c??D&EhA2Lz0$)_Fh}em`Aq+7#Y&#K~ zlIRF|ew>IN1}wc%6p7eYUX0Nzl730I_)lzp0vbz|LdBPQI+K?m&ym=M?R@qFE}30WBw8JhSI6VxhG%ww;jnBCfU@|{G7cloqygLTNvqSB(+WT&T|(j$;JQ;Xd@c zZLR~~zk2FG&X!^(v9eE?CEw$A^50JG`sR1{0l+VRK5osLlpGfeKoG(JiE8J;hqpQ< z_}+IX=W@0>Jia8z!m9aBqba4QDg~bcLd3z?i^Q8{i)zdGD}RtEpR&U?g)+u+`Iir< zilZZi{CFnB0tf--6OU|eh+?2(fdE3bd&aq4Gp1*z&&UD#_? zyS%42e1B?3dlUd3e0WRUkRkv)`S^&}UTOTrueJ^ymS>dZ2JC%%qsx}ozWsK+xbRzf zVbQ*Fj~67&zL@qNn{0`1{Go!7h?nnS$rx}N;-5V^6mH@ zBr%K8J%SWK>!uAcQQ>z?R!63Yc5NsWe*h5E9v?tbA++$Na6cVF{DuxJU^R@(?h}D+Bgl#ckddf6Vnn`Wx3~7vvO9L` zO%uZr_b-oak$R{wa=-uxW;JEljajoZZ@*Qm))2`t0%0{34j{T6${QNcd88FFCXgEN zUyM3Qa$(*2#J%^71%Tb3R2eX2@`~h}G7vx3X>vnu@)gv}t~j*d{BBlf{Dj=dk%bNG ze5eE&8K7<_piqB;jkk47ePka2tXrSB=Rd-L@h-wB$$KC`Fk@yG06IHEzx?^=+yE+- z5I=XxYcZ&v*~iQVB3QS+`rf<80KhJ~PN*QQ#75F4K*L_W;Gztn-j7cUzlUsG{07Aj zCuSD?P&C?t^3kiQm$HRcn?5}Y0G(aoU;TV^E@wF<_1L*laSrSc-}r+`0C3tF-3u0W z1!3yty)?$A=in`5F?Y?`DUwuSc!vF|BdHGit7X(aLl_+OvR7OBMq4V}%E%!APCKJ3 z8g>5ua(zzBd$j<@r|7nW{`HGO6R`~Y$szLLX1Ac_5= zc@&TK3NI6*Nxu(eq)k=az5I#;J`dS-umA&Swp0jtF?%|7T85DM>-)#%bC%<9w7DM# z9tbmke(r+Kc8v9lX7`m9vw5iRdM$+1DOiOzQl;^B67>Sc*s_q4_mpYN zu_#j`xL_vV!f;@wSxmvCoRGH_o6sHu9gU0{rnb=Ns$JK?7$d;8#ozFZWvLZCAt6N7 zUo8Ei*3*|SSideujnbn!D1pt@49!mqeSsLf0XLZ#;PNjYYMzr`^j!Vsjn(A-2`BYj zdU?C+!VT9>aa@1UKDm+4jy;$)I|Bgw_C-gH%FmpYp}XO@jSWl_gl=^6to%@C`b`AT zSV|ab`LB|L3iZ0X!rfhA6=1+98d0b$ekFiK&wBhxeE_g;U-W+-8CEP=lcx+EIusV_ zf+RD(u1rToV!sf*l1x){vs@XmTvt(u?#@tGXGq*k?qNg?VJzkVK-<2^&Ye|2ZMcAz z$|H=$iDm?TVqhQz!v2mI|x+Athba?cW~-fZl%fRfVizI*!Bv63u2a=+YVZPe+1p3qB8( ziwaKAC83rnRun555Rmi03QEYvXP@2WIOz4)*jLuMR8(YX{gz|IYBHkoFKk<`hr{a) z$otHhFu`SPr9fx;E9jYS;S_AJ{+LB%-cPnmfPKlM40VbjP-#{Aq5TIb90I@)r;4*{ zXBEHeVQL*fW;~X_(Jf+TPG~+rF->wa z?3rA5qv)k7AWt2w2Ukt*EDo#Y{Eo6sm%d#yL z3EPISNuFFmegmsCkrP7z?YDv+3xDYw4CJ~(-g#JiL)88xWaXa*lj5KEGSr@YtPub% zyQ00nuL}S!zp_19Q`)&b{@C9d9am_lLpPCQo^(ZEBbYfe0|2l8z3%JZJdjE`qsQi3 zTdG7JHZ~M5{(O7$oJ^|L>FEh=-4cK8)ghnkh_Q|u8j2TxuD$t)Oe$3(6<&XJ$j+TH z(rZ!5Z>@uEvQnwv92>WjIY-O&-=ydn1F}ln0oGc zomXCU5CHDId+aHv_8c)clgp!5U#@@krFzPFGwukDz*6`-daX@J24z}7!rB3&fG)|n=l)3#UEo(kXWCyIH=B3ws zoOtEM`m4XcFOhKGeyjGW$A^*uj7IVK7qy>wQh$9zvA^G1wJR|jd(YTYPU$(~$aF4`UU|9x)felTB##-Fzv^oTCQTkt$Kne!Kq@Ta=A50` zl(~a(^62!Mj}%T0BTXU^_riY)9{lBKAQJVJgPaOMq6jK~lLhj|TUyD*jvetkZyQgptD??ArWZMD=l0mk zi|RLTsb;N?oZJ7!OAn10S=hU`>VF;?4udRboYnQUZ}JtDrr8-ng?QH2S8;rb9A;qv zsEUc&jdt#c6YXXezP7G-(Z%hvn=?b|i}}3W(H`DJm3PjO>6>re0|3uI)9~ywLkZMb zvog2;qy+$8d9nWS$A*Ed{tUuXj}I@oSSR78TlSI*!fG-c(JFW01sw#*T+Z6DJ@)bo z4O=$H0bpiR_Vzn>6M>m`bo%3u60f|}aP_r&lS${FZ`D2h#4stJV_Yyg(#i?~IR3=m zx*^3C%Trxl5dfGuD|6eAcdh+6nH{i>n%BSPmzaMps3 zE3RwWmg_JZ(%0@{NQ_2+uOqc@Yquu0bu3I)I+}-g8+`4+keB4 zTJ)hmcp!4abyG0Fkw^C5c*`DRg&Th`6=TR|>~DQ_S}t!l&*|r>uNX}m=V62@mtN7f zU|}Z!+;Hu*j*bWb{Pl_T0Pw-e)Ng-17Gr$+nO#?XeZNR1snF3LzW&;21bA(2;X+w? zH*btT_4o+KMF`-DzYXv14zqsS+M@UTdQ705~`4YFW_$?RknHt?X0Kb2@iKwwF@yrdM;z2?^mWcSyi}}XcxtymyKFFNX-xiAqG02!kYgUS*rp}5*wfF&ZsI?(MULChioex4vB|X`CA4gQpE2i^ZS~RaGtRsS;}uYHc}6g zgb1gNDI6aTme0q@YXP-s8xtgoh`+eVtVS5{fdi3WKQQX}6O-3ow+{f4HKo75GUU;} zXc4gV20q~mN&GaQE&&)nF&nRT0pP>cH5Xpg+0a;=Jv-Cd;!ScRfU#q9xBp~MvZh2D zH8d0(PU;PX@PiMGBK?gWTe$tFEy<)>;nxq00)R*a-*IQ_q$yeQG?{dcI5OQlC;iZ` zN3DFX1^}vJ?p=4cG&Fjflp>K*O|mp`QtsKOhB^fV097&PuDf?PGzb-HN)smzJoD60 z_5I;`L86y}E3Y~@YE&Kos;c1fD-Q129a+CN0f6f2i?`p|lB{t6VEBl_)z|Lt@?Wu} z@Z?t-0DQPAdB#~i^NvZ69aq@1Cn|B7)=}77IOjM!izgs zzE`t*S1cTIZ~bx0)M*2xa$TJ>|J2^*Iq9F=KB2um1OU^fXK%P^pKW6Rm@qMS>yP(l z25gYC^guS1u_f!*RCjmVb#=~hC#Iiyx{;th@0c`sx?*|FpeB*7{0be57+i7Xq1Kk@ zy0r-mFl0#a4rMGljjN8LNt3JrsGQ7@MQo3gyJKP7z3t9DQ>S_|Syx+{e@ajDob*rc zm_Pzqsh2>KI2BcJ`4tCSTcYdNCMqF662W);q;=wCsuu~W7Y~kJ`CbiRGMan6(VQ@F z^X;wKfpXIRzgFm+PbA{X+KmYnzkP7@%J)+M5UX^!`_k`+d zOUItj&r;ucM|*+(isdx`5UWzvpFnu}si8PHY^9h+!uXCm_b^r`D64-Ntl06(~9YI{c*FctaALR#ii&N;6W0A72gL44XY zJ56vn=GflmIcb8!`4_f-@P3M&Z~=hJuRJhvR1N^5Rq&L7_T;xvYhN@xd6Nc*SwS$yxdXaZ(uoB2o8Ozuj7!Dt2~8 zRxC@s{L;{3(Gug+ZJXn#p3yaK+`x>PnH}3>jg3Vx6$?S*(EOx{SpeA68qMd+@kD!$ z)u0&r1kb*S1D0!msXYc@D}-W%jcH;l*A#zf(Wapo!cgVSAfKHw7>XBrW4TwQj!(oQ z@`_!{K#<4-F`)>Kaw^KCWQ0|K$008+yu}~~Ju8RSMq=v|NwAS!CBOhwmEl;Y|WE~Ll zcJ_kIU_@tRuslj0QhM)Y@?L5GcJNLSES&@{2Nx)H)z$6=7k8Yypv!SkD1=KTv|wRZ z-H_6gk2bcqM~w~3h=S=6+3noX5$@>Kg~|zjrhMT=Mx&5_GOwncT20cJ9KS;UfxC z9|(SU-2?>q=;P9tUfw|;a5K4LS!&aUH~_l)=Pj|AyM1fy_rD#60m#(2YZPdrvTt8>_pTVBu29czd1fBbCRLe9xaKfJlsUZ9* zo!OK*{fwTvy3$v^cHsW|#>lf!WgKE6={)lAsL7MFXPiwWs&De^#{of z>#NUM&?Ss!MdiKasZATJ0pQ>7-5slPwr`97*Y8FE9ZgbhqIiDk(nG$0j0FJ*+Wq39 z`qitFb#=~VS5PWGN)`&%k#qY<==|tkhb>(^Bp!FhkIypYbsTtaSS&7yul})c>!;mcCOLi#tU9fqt4;A>mJd7*41z6ug;&3oa5^y}G8Zwsa{)k}YxD zA$<2;@PI&A6Ux_HbPKVjhP^SYUnMF{roi@yDj+RdA)y)M4LZ%BRd zob$RCi|>il3uW>9%Tt>-Rs)8Azjs$vm9s-p9PH~=y?_Mc4eP6~{q9s|l+In)wcxx? z0NAuKPHJvkpSbqBQ`wlFyRh?Ixk4FX;%{5@Tc;DI!M(lgSb4UBkO}a!dp;p#{`c=k zf?yvcV zTIPZKCYDOP$(GIWQ_tvHa6x-4?rh&0Z*1&kkO-D+O`DXK-Bo{hWK=-!MohI-L=UvJ zcIsb4VF|PpAgXA?sD-98Z-u-YaWC{tNnwN<|1FxeuhsbU-oJ5Lt#L ze1(iuc;MF+siHF(`=F=G9;?rm$&qbYk+2=DvZ7TXl?c5jwS$UtL@5>FXv^L3sUIcp zm4r@6;>-3ZOX}dXsqBFQwu1fLYxd8b*Z=lgsrTQjx&6-8zx;VvGT~fsap%-&*&kdz zRoe5cqX;4;9?HVz9j*jTvoip&V_OUW@7Pv#{0V(CW@c;~lQS?ACgvtg%mKibP4WM{ zYaBVT|L)=xdy~ZYiMa_A2LNEprfO0F111$nV0!YYy#TO&ZQ{wthk0Xx@bx$COV&6u zXQkJClnh5bM6+2dleRNyyS+WKYE=!xU8<0=Ga0+RJ-q4zX`!QSe*^$}yR!a z^LxJYy|zLDSr$y1oV(znju)P9un=w>Rs?{92O|EX#Y>@pHg2e%ICbENBh!0Zt6E#D z_OwKY4lC5ulmKA<{9XX)@3-#1cTB!$y|<#KacHS|PUgtD{mGhAHe=72l>vaZw#cvV zALU@!vN?9&FIzm&RJ;kJdb(ILDH*j)*2-j~2!I?+%jeO){ZT?9skQW-nuX_g1HiGz z_3dqK96upPrY%;yn*=(6*tRbM2zt5)gq{uMh36XHU6OilS?ZM2d&6PeIMkCUIu_Og z_l?OH(YiI&zxmw`-?0#i*ioT?Hf^Y$G=*?7+S(fRIGJ()VE)NH0MMVd@4s(Mp=iCg zBGovw)ZCmVob2!QJ=&_57oTf*cS-Gg%Tn`CV-f{`P+MCR0D37Cx;jGp+r(F|;ge78 z0j?JS0La4E-?%rKEX`=jtY4epqxrxX7sJ-gvH!e(SLKKSKqhNvvNi~#NzU$y#Z#QF ztlBs@OrVcE?OvC7>WN|GwuSHyZrqzlmS)V#to=9{p~^duwX+#3ld;+l)vWrU#+y}zDo`N$7*^HIWSm}(#)gJ)@IN*`svAVM}OvpqO&H1PH z0>B1}Bmf|aPeF_bB^fW z+Zx^58r{%Evv81db^s_wjXT(N`z;I&sF8pQz6*%|uL4<@*P5J1SrJJYd` zRwvFpr)Tt-eAsp|Ai)HUb}?+(62Dg#+ODq9kFKBSx&R15HqM9;LLQ=p0@}DCK9P+D zRo+y}K>!h|Mgv(pE4l-^f3K@Me9H}!$p?fOl4qRVO}Z$SOb(mBGXbEC;+Pf!K)!)- zzJPL_Apk%CO|#SIoZATipX`kNyz?zS0)~`+a zAW~@&X*$prUHw5#dq=dcu5iYgU5R9AR#WEG(>wq12G^h++pC=tI_~&h0NA=Ue!@w; zV8~RxlI{j27D@DSs4-XDadf;nHP1X zQbbax$qz#$b6EpcQ6em&r2)a0)CMuqoeKSp2kX+YW_MDB{{7Qyj_DPw>mH z%kI$+V3vo8aGsXVUkG`xnV>R5P}WHK0rlD_iW%7Cxn~=meWqdeuB!3lasW^)pckHR zSh}Qk^q744yjT0}y@nSs;;*E~;Rq%Ri92@00ATy}H~>_|+(}agwrz<40Lgm+;GMT? zT>&z4+Y@Pp#c!uv&T!P-6#)b_H4a&^nLQ`{_%oXn%!Usu0Km4*amPWnjlcEXwhJ%m zT(_or)vDyC^$8by!?ta6wN&Bb>Q$?go7N>#Oqx3lMa5hClfvK6$d552$8{(p%q9{Q9>KAOyes#ptQi1}^!0$0c9r z_~^sLzP-_3J+uP=F8jhv@GAn2rJ@A@r91)vr-T52gr1Rz8;#l5syKP`J=M52y8q5rvOhw|Odo&Y6Q*-(;1CoV3tuX*_N)`Yn0#hn-feA-k3L9g9S6{A=MjQah zWNpJMLxblF006`2G5I-1^tbJgtocaYrRF|nkVVe7U(6UH zM&hGJ<(lUZ9Fnftn0$g?bRAc*u6XU)MLYt4I_r7F)TUJttdVqsQ6da1Y)$g`hX&ZK1sMuwLqsjNvWTMX|QA6)xEwV`~&;&s5Ao7MOc zlMfLE(=5w3VUdTXu(HboZn2(l=@+_+xY1L?Wsou77ygn=%Q$D^3tQg}i@gK;=2OuX zFwIcY^sXnt_-T=p2{sn4=qJd9#>ReCoxz4*6^K3pY2wsH$VHZez;QuauaWWa(g!Tw z1Hk27kVviI;>E{${K<+8UyMuryE{C~CqTe{2N(ntSdI$2KB?Nht4gWX)fry5CgH~$ z>T(spo+Kc;ae-BtI&FXi2UmRg;N#D1zU%JYKCZ^ttE)E)qIcPSBr2O~x+bajPT zFSJkZMZtcBEa$ehMIQO>h;-TpfMLT5XP(`C+Z}suyR)S#>HuH_sO^AU;hgTQ{uG4F9-A3s~wr$TcjIw48l@HbY_gJr zUEJREqSh_d`0Ha6eM~x~ReOwv z7+2A;=5-ZVB1hdCAL3pGp%NfipS+yB@Ld^N3r0UXev?M(?}5t z#@NNKS8%MVj9x?|9vbO>E|ckgJ!%*G@G(+@3ms?^F*?KALxd1Q@mRnN9E7U?0JXJ6 z|LftAnT)5rXE5y+IIwhSEqD@@pLc9O0PNfmKX}kvlOgtjK{)g5?pvAqn}}9iX1oFu zBsFDJ0|0<+Ve+jea^sbk>Ysmh==0AG&1NjG9u}O2pIc@qA~^TF4us&fzt_72C|2qk zhRU`jl`R$!{c46MauN^3&4d_a@9Nz?hv4w)kV3KKxUTw5BLD#C>848O84U~=fB9=| zU;gT$2@|E1l9W&gGZT~+UJ0J2Z{j6G^5w4vK=2VKO1y0Y0JOD56p6a^jy<>CxjPnh zNmh5|SNC6e)xq%-1`J);t~^A7pmXDI8FX&gxrkZ@J~iyO{YREr$**{OGpb ziG;I%U-aj9Pt0a)iFrnkV~A4ZpR`HIwJ_#7bnsww+m-|Xj2M|$nrv8?NcV@fZm!Pd zh2!Ovotb`X!}`SfHHkN0uYc@s!vSFUh{93Fs9!s09f?>ED)03(!vq`evoN#()&P6? z8eci&KnZ6QYlp;Uh7_1qJ4~;C_^|>lSS|t+g8UMX)XOnmA!5aupp>L0>vMm*AN{v@(DZy*}*I&3g#zP z36?TsK`IUSRxnahVbCaD*fq#Ra6d@+pAqi?6pXQfIx*?=mvSkJ3)XG`0LbNw1NnTu zSSkT%VXM-O;tg~xu&@4kdxH^cNK!xMz!307PV6584oU3W@i^YivVyo>v@sdIwgYix*4Dq>gr1R$PUmK^SrmB z=CA)(eL+`lz-zF4S?ve!*UXrmo!yi^`q=c)VTGBqGUqJle&P8B0%!TM+LiCu%xuce zo-J2c)BxsEmf?&O-tqzfB$AxQM2#V0R$L&a!Zvb50RYG$w?Yy9=?}whyR&udxcp7G zv;x2v1xf!8Bx?CG=`GVMme+o;GBvX)(?spVjG38p7IZCo zzP$Pmh^+pL`WesM0Gc#8r?>L6*oglX{FW$!YCA#v0cujE6He+)_lK4(sbi1*21nFV zRbi1V_1;ele_~I6pS|Sm8mz{69E9t=E`z_wGaA9CozV*bg#!Bh zLnAho+6^GS*kVw*QQ?x(%Qu(u386 zy^K?`;Uq8@?1Pj_e)GHg#*WJaz~BBdeCw9D4*px;5i7_?%Dq`?Uz{q}X=Gsl2#ZEc zT4@O~{3}+}ty-Cy(UfUwO3$OLK5IeOi;KKZ4b|2aZ@ztZ-H>8iTlC)lm}r=$#EdJF zE)3cxdE)6E2g6um4gy&8-0(%uRrDJC{jJ{i^-&{pfNBSm+WN(i0*=D9Z`{hOXtjhK z1_KByN_v_`{<7+-O_C~OB)|1J=*5@iwc)cVI##R_UaUTH~-j;0Yh2|WH zoup?V$xmcDqs5tS&}%hs2Kq`~erk{9q6l19_>M28S)VL_L|aq}^&)4{{6ga%(_6Ff zR5EBL*}_=hr{D4C_1RUJv@-J{9~c=g>hQMzNu*d0QT&OKKQ`s z2Ok*q-~*#Rc)tb!rc51(L|qKPmYwIH+9PtRrq&B+cF_tapV})=13KE*pv_1=nNru;4$?0xj&MlWh-lCk$MCjrwyPf}KW+|WZ zxKUeI^5_E$829zq5*6K{-tJIOkKNO4SI0}GBEo>lVt%oN)_U4am3PtrL%F9Xw4O-R zd{3g@U%@|?V|(h4)~!iA{^;g5P|zE-$`%%2)S9d#_hAkGDhjLxyax z9eIZp*>B)D&go}%Mk4r)H)?bFVE5|v%a*4SHBKmm0bs}W*!%CN(it0L7(an8zV&p6 zs0kV%5&KwKXc>f^JK`(fPo>kA0-=&ZLdv3Jty`OX{L$ezT|b%00|H3Yl*BHwWx9}z z55J+uk^C73%^S~}UI1A9cI{hl4$-DuGXb& z&e=VTh3z320EQ0DlOtMf`=f&og1o{$Ct=w%lGi}VCLMgXc&df@dBKe%{y*EgDsrMC zyNxA~6;Q5OA8EBYSds?U)8Q8*?ffIShY8cyjvH&6a1#1A25v+*sWa!3gOUv~_lLwk zB0vuoyTw-fO$B3cUHW1|)~SD{3R>h}rYO5ZeF|p&!555g-Yq^trplkHFx4gg*(Xs) zN(+(Y0yf6h*ymBmwjv?BDjcc`TRxi=<@5uIKPY0timn-PdCvq^s6ng_lB#gvro2}= zSYbxI62&rD$?}G?e8Ga8n0pm}3H#oG9nWD$n&Q>Ygh^QdSiiP<<@-reA7eP?xV}&b zPoI%lyC(6;PVa2ztfuVEx9?f`UX5krsnZ5RA^gyA2wd9}~v$LQ3e8*dFq_%C1=knJ0 z@dJr!7s%-{005ZLl=QheZt*tFxeeJ$?m)0&guQNp7xgss|VvltSt3UcEdG@(I z0Pw?`TNgdsaNt0MeRQqAFGRlbayZ+JKGkSFXx*OWot&K0dpj&{00ANUcu`23Um7*402s0Zc6XP} zw8Ml8pH^D>PV$H&y!`?j*T;LhZT3v)q9k>Jye_z%#GnOt0019hJG= zcS%Yd3u-D9Q&xeSRykRF>1BtKN$19!Ti^W)1NdVm0;T>iF!lms?-$|Xj zu*(k=5I=-n=Bt=L0D#_JFAqEAw7!n^NU?|t1*@YY0tl8ZO`U&X=g?t=TYtRgpKsRo z^oHx|icBwZIcw9#>N!WGM~%vV@4CGk)>SV!zf0}-Qx`T^lH!ca15m{Q0D%2_y+x7> zF7E8@wKHkU#ppm=v@8{+l09Q~=5wF#cr0(nm9Xd%oUY83Q`{}dNmwc}M ztv748Z>uJ**<&^RCeV#P+D$&~wsmv-w9~tR%If~Ms+B8h1xTzv1aeR}ba>%}6T1Q9 z;Um3t^yp)IM~=(^z^aw0*1c8Vxw3^oJKR3+MKQv8@ma{<|SQT$?I70kznqMn_r3pxj z7~$d=DhZmeG6V~bCT7wrvSpbu(1a37R+|6-AOJ~3K~w?MgVP=zk+2<$Mq=Sm*mXl{ z8&knd6)HqseO0&dopBg2!t{%FnlI-f%DGwQE1s1X1NOlL4N}F;BTk$jv)+i+MBY1} z*juSKmO^Sc-(1jPB%BFg$e+G7d_iBdv<2R#N6~51Jh?{Q4T@~@bnp(=`%7CAsCh} zt|1!{5a8)EGt+146}+XPuYcpfkw^85Prvrf1LR`qlGGy)E8j3soEipzMb9=Ib9_1; zbB;fu@Awn?0HCKgRGTV^%`}(6QaH4JZF2dt)QKncR#&^?CnW(OSyMXg%`lF6YPn|Z<)SPW<_JX8P8b%g(7Cl$rJSSsWaKefGC!E-yPFn{K zM1~LN9~b$?HxJI8Cv9>6#(50YcC%a=)S>-okv z4=Q8vbvhPH7N>sy&d|8?KAeA5lufIIx zsCntBQ?pIYnWkn>uDZKJfBExpqBI|_uE`e;MkDUbS(%x$GJE$%B~U^?u8SSl5hvhS zEQJ7V-x|+mta!D1)Y1Lqn>{18mU#Q2aO2S8Kd*c?nh@u1*aM93-y>Sh1`|PR8)G8JTGY`;ZdvY~K>gX6<;~VXWS{ zBYx*?;{jmNbB(i`v*RZWOq-saHeExKx(;DJOynH$_8b}vv^eKNY%KpRVGDo&PM+UW zQ&U>HJfA zQYq)1f2MkSLuDdhK~Kqri{Y&|>lQ5RN+#W3{${7^f@MLvKjfW9zyJU*JXbFYZAKJY zggAtR^8kg=-)ATF(J^%o~%$aHS{-<9*yp7#Icp&n_>!v6b9@Hx!G;Da`k}pUfhdbuj z-eZmh0NB4js-(UgVc~S-haaZCQfLc6(ys{7uUYlpT~dnx03q_eKma)9G-*HihpTH= z3L7^BX3`VJG>jcOEPu)8C69T`vAw{^+*@T?(A3=D)GV2)k3Xzg@^(F_cAfl-j0;iY zC**FqqeZ;avb*ZT50YXW>E*UE6D0h7w;!|6SI5Xuycq{fe`xW&+OJqIAXzAz0AXC= z47}*j03iczpR%ZVg&O{|dO}(WMkdKc%&}O=ue-joc+p_mn4{|KCzBk;VWFo}q=?gm z19vCvd$}f_AOH(lC}db1SLQW*J3>Mfg?Y$g(WPt#N+g!tP?sIN4;Ys#!mNRa5>j-* z9~3fNnLt%owA>ZDSmZcSWuJFD$ezNx@Ggt_yi+JRg@RKoT1p%Be@1|z6D1%q#T4{P zC!5JW+p?v0A=w1O&HoRJ*@ziZFQnI{x3F}{xJ9eaq6dAqZRg(-?CrM63uc;{Genqn z@2a}}mI+H2r@A`BP6>5(gjT*+^U8}u7y>Q3Vz=K+Dum<;008-%^|L$2KlMao%kHXt z9u*4c;K9hMmC4^dG_sJl0OQuysuvd3Z`&H{?zSBVWwZ9CjqwNW8@+yQg6vgq-COnI zqWW!HXQ0-4p4fD0Imef=(Gd3^r-p0SOwxxi%=AokT5d=0+v*g;?n zV#h`ss{tWPVlmp$NF&Winx&`Ls_Lpb@%}iuL}W&uI^8o8_DRvMgnj!Og?qd4`u2O?dCZ-6 zj`jO^+pk)0ebcccUW_DDF<*k?A#vOb0KHZG*>w{D(C_0_Ki-h?T5;zzZIwk3_w8%G z<)Y(mykWfG#{&l%pZwUiTW%T$GZqM5=#deD(40l?#-#ord&@;TnI!Aq{q{y9NdN#? zTCTnSy~o_Wx7qLGO*fAJ-MfzUErgShfQ1LX8;F3=?bY7(_8q_c#rVo{#>9#M*z4Bb zaN+TvyLjvEyIQ@~%*~4ry#MIcUJU?lxMBRg@7`fX^S1Uo-n?URX$@apiskGv+lWyJ z(_o12c$^O^r)!zNKV}JP{6DupVz!?-K=$|g$di$={YAEV#v<)HNj+zP^ zD+k#8XJ2`Qc)?Q+0>C%Ewk3pDsj+ZMrGg8_OK#twHq7&t6?oU%jtx}~4VfoDZ5{x= z{?!>>1^C007-SFteD+hbpSyT=@1ExBD(<_t`KeEA`_8vFaCUCEVf?-CI<`>SUAML0 z{^lM2O?yN{^tn%O6%;B91uGjWZOuq0YDjF6ic%Htes)MI829eY;(3C_%5vIj4! zJevR?^*SW01bqqHsyN0`nc{_HCf~i!VbmmzQwCWE*k2tSIB*bm zo^(0@WGl)23RUrmNC?A)u5t7Sc3Q`M=C9%nT4bceX7@V*#wg%S;!jlOWH zj>`L?@EJE0{ZLc!g%Yh2`3+XC6t+3OMjlTgWo{DGYWd%P@Yb14!>fKg^|$XlR_|aq z^^#Z#<^333u(3EdNaMR;n;dc~TLb zrQ;wMhI%ENuv1EZT(#(Wy+(ic4>xa|8T{nOQ}2EE4oGW!k|ojH;irTjR*QK{f~o#L z^q~tceZ}sdUN`xUw;sptgf^JN)3_sk60=!LF3V-REZLJY&szE)ue|HJYbW0Jrej0W z1$j*U_MIX!I}-dID}h^Z^-7;9)Q=;^m_#$_Y|^6g4g)#Il=ER}KbGV}>p+6lg#2Uc zj#0iskW=EDi^Z)f=LVE6mnE-Ef)&qzP?RFx&Z+pUlcvCBRwOF#9S+6bjPJf$`p&hv z(s^#a!&q%Y$`S`5&qSfnfrfS;1c$&zpOusKRSgJ{Nl8+0oR>Vi84YPNDTUnH3g0ed z{U0r8KGHn9Y>e#ZU&>bF%Nu2yU(!+)V=rf~A4Px25(43PGYIC{%))MRV$w8K9&=lG zgttuZeA~3p%}Oew+WI_@`C*n5wETof-hZ zV;+Cbw(Uo4+_bqd)*P`@A;fB1uwzOrhqdp@2QG7z-$Gf+=UX)zF`ewIx7PTqM5XlV z3wHy+KV7`#k}uAxOd1X(lczpt<#iYBazBkQiC0j@s|cZq{Ztz&l$?Dc&C~VfM@;=R z?yB2tl$SpiiyHfkr_d+7?S_ZTl(#Ge*Oh>Gn=w_|b6yc>&z<`9x_J9;xr@ua^l_Znda6)&(VRyz0z zA!jNpL(F74;?{-A`zp)GJiVkVZQ-ZCtAH@{l^_J`TQ>LG!s$^ACmyKg+qdPVT87NjHnidt{!-@G2rW#J7Iz%8 zq4{P7csqge)H3Y#Ru>i)Yt2Sk=!;T$#6OBcCeH$diQM0G*b?c1PB`KveKdnpuQuKU z{Z-t}p4(YiY((55NfqL$+ZELp7i$R{hr#NB>yjLR5ciRIcRt7hgoaSs$je(XZvj5@ zW*#NB2yZ*bFKH=2%JSo`&dwU{kiXg$b0o`cf04iZo0Akvuh_rFMO@a>+N8dLdl+i zBT~oWE0=6`CRL~7$tjjYL?ZqW7wa3R5wVB>L^O2I@fK%TCFo4d_>mB21Q=XfQkghB zf1nkvRNBsAuAO1cSG?wSu2I)rJHZ}m4Yx%p9;$WrAdY)^OCvFeZK?z`$mQZUU37fd zQeaZUS`^GeGH*A@oqQtquRu7iSr@%-4d-$V7;|m0h{CIVY?|DAedJyxgsf_V<#rd` zEcC(%!+QHaK7)lhOHE1gMqdshO1I*94z{*bdm1Kkx*HvFR0`XCja!~$@qQfsIXS2& zCGDxUU`$=zutlP1nEZJrx4l(dI-Nx3v$^V%-uH-4w#Ouwb)r-FT2d6mR}$hXncFJ$ zLLk0%t5YKM5_mvP=&(^oq|{s~ctB)~vVMZKDx1BdN+1BqvGumHtS8A+3HC)U>u`A^ zE6LLkr(Abj zaD_p4RHMwXB>IY?tY))9dy*4BNX+Rg5fj6wAUiE!9e*WL@{*<|P&ANP{2Fg9@X>@ELTkSz2nD}_1`?*d;*{REule$q zoCxVDszvXf^zFB`|Hn&CV#S03mR$0?DPbzcTgoFSz_5wZC~J451q$ao&y~zatA_zz z(c0JMZjpru0R2IB#pN4MIkmHCQ-5rX7Ur`XZkYJ;7q%2{6G`%(oN@$!IzK7}r8`wB z7fl6muh;anK@i_D3%Isih@&Kd60WY|FMdAxp?^Gzf~D8WT-#P4I4=hT{Z+jDvguPF z*mYxZeK8hyj&T$02nds@ci24Wg8+eYaYh27>?VT!6cbrWZnxI~i?nv9u*!Xt?uT~D zo1j4b$U}m3#nn~(52H~^$w0P8qKgUdmK?>zjf$)Y)e2`Qj1o?wy$BmlmEs&`> zCmq{51Z8W~nQ}6oD}lKJ`Y5dAh$$Le6RSR=vPLRIl_6{K&meIzBH~~$SYBF&te*PB zd6*f+c(KK)Fj)eUp6_%;&Uh@=gmnvAT4ze3?a?(-DJ{crvW#qJL@~xm=~+|D2pmA7Ap~6D@lYLQ;NLJo07;vp5o9~0V0s!2G*OGz2xL#Pu@e| z(w^R@Vz}?c9M4d8)<4Bno);hHEiolrbi=#-f4S+=X zP*%JZK4!AZZt%r$7rrjylVdIgj>JGuSK~xyWfjh5TweK#24gO6b|j_-+56~{l7CL!pc&XtaGCDW2h74Axmd~nxYXNW+Q4~PB!s(sDX@~W*v23d#0pmFV= zb^(Y75&+FIhr?U4o-G3@>tLmzL#`lnQAxxzXYI)yA`)zsbMD(u8aR~aoK+Dea92<< zh3xg9S2B!XhnIUIL0?1%@yudq(T9R-+;0rbL(F#tzo`7?>LEzVza{L&w*tyq<-tWUfJKvc#lBEJF4} zFG-G)<>4nyelf17HnNT)D`x%)G&3n5kk^k-;=bSPO(?gync7Z- zsIX|A#nLGC!ptx69EXcG%#)zT^7)g}!p;OJSjBl>dW;We26e7wr+ihr(;J-Fuc)yB z)__>mBA3F~m2{I=%qIIA^IGS=$JEI+sHf zc6>Bm^)N&*YQK;WrK`9GRHm7zU7@Pot3DMyx1(yM3LK7YOc7-2UDfRQ+U4a(s)!w} zGzd{zT)z%zD+?u%%H;~spGYyxQ7G%c2E2tu zVgGn_QB{y8e?ej@ncX_dbNAv8Nwdf()qKSZ6NZ8l4t6Rcb=_1pd`NOB zle1np8oFTdp*|ui;$Cg{L$Vhe`%%V0)y9%yEF)zof1Qc-+rVOQQ^1dU=&{&=RX3o* z8EO4eeC=VUbUSLZDSuGhRE$nB-TWChOCUkW1aQOQFaYeK=_)eaqJgl=(ilqno3tsG zVoLhbydwbECoX~xaPJU|2EA^miSIMEyfAtj|T)#OZ6Le7NyWJlpCm2TN$~ zdse`L@whjY5|bZWZ;|(HSBlo$=5TauAdGvhiY6pbZibz5n7`#-X_U9Gn7oD8EM4sO z%4q1`LMIj8<(*%zwN2Gi@`Vcd+%+|)n$rMziXRcuR1_kCq=OV|2HF#J1SG5=`Pa_H zEESL_i>SrC8&WKSb(1~Hy#Za5G~T3K)2Ux z2&$zcg07By;-eAo_iD0nCRTo93gVH99r=Bh0!JKNvu>!!34jGi8k-z~hkxUO?(uS+ zOO!bj@E)Ib8)az#_|zM*%VI*W5fOz!bK&^%XotN!i=r5X3@izvkdS|ODfe0x=A=z! zjM+mc0AOqr0f5+VSCTl)g1mXv#k!uCkmP*wABOY5?4`VfQHW6u1xp9Ul?ZTVV_hLm z1o=v2wohASep-#F;uABYQJ7Cy=O7tF>FrsdlT*t1`TRZILi3HcB@Io+=u&F7p zZQ|eHIj9lrxLK%jFq$v6V_d-nP;ez}8fpa?>k?farfvj|$28{=z>Y!htp{)a;>4zZ z9^dRy8$g@#5AVC>d#$MtPHhjsA3x=easwqc1|M4T9S=k%m8j z5Xr=!=n33_>RUANVq9Kn1xh149QU`pEc$Z9Zs-=10HVm#!72jC!g*6bc^@ZPGa^4777+w0SB8=fk<@X< z2`i-D8i}ZUX-&u|%X`Udbah8qR7}C_&QvH+&j*S z&#A#V-NnCL-23&3na@nja)M{|mi}gb&$rss|28)L`a^dBz(=RHUe-2WEKhQd%@O|BO4z0Q%`-01|QgW z>*eFqADuc%cF{$)(ji*Y`qKG5XY`he+yUVJTI0I0@h?qmS;87enPH0h=7zw%{)ulc zAaB%ASeGq|+5^QLiwqxg#U%?YMi4zrfYzrGb0pk^TJyw!kMmhRGDQqk!5MWgFEcJg zlvD1AaR=s{AH$Avy)jI}awftdjPz;*Sa8VK@3z^;|q*>(dm9@ zB1+Z`6$7~@bebH$lFTF5MLuba0;CHk>_QYKsbK@jdrp~176T~EOfezXf(lDzLhRp= z$>5DZBOo~2p@s61;NXz`VZuP`jqIcgL6>USL<!p04JY+eMNN861kWhS8$!@Vh8Ci@^@)9NjM4%N8ilDeAB&ugw-RD^`x;m?X-*0UQ zDx2ac@(?T%usPR^O#r|d{pAPr(_IAztL>=*grAR%=ZkP!uLBdJ_-XwW0JyGca)*GA z=q|d@_mTa@A^2!1Ow~=@D9DCZ=L2J{Dp2a$4ULl+B~*(c2M$xj$Ar<|rf8(1uK1lm zYZnLrP8@WOAM|dokBP-8F=e&>#T!RNk!gQQIySvNW&VD%fB^&9)_uYOz^UI@ZDLy3bQQrSGRCr>8Q7w4bA#Z|c@4 zQ#y*(@WO;5sYpfS1rZB(naX=1j8#JZ%l>v2%bAQK)*!wow#F3M&5~l`$x3bLf;xo_ zG|<(~+A=I5v_ST#c+`QdH4#${2Mj6jWkDYz`^APPn3ZyaDZ|XeDlDv-6})FZXiL&F zG7GmQjjaU#1Dt#d?%XO{+#}nt8;W%(c?{vS3`K6z%o?r@%9rej{<@;fRU;FkdoI@( zw(F=6Wck8{Ik67fR&WwVRz)Z-F(O*B*oa$lQ8=jSPX8$GgF_S>^aiEW$rvh<%VZ&k zj)~G>Gi^slrO?}JjIA}5y_efhb_3Hy`y*N_-}NnMjAk!EBG?vkO74`Ecy6>z0J36` z?3XNrr3HrfyxB-UVp`k{f7ugvHne6dI(%BnDJo+uw(e@iMiZp;j?uT2fQZn&`7RC^ zI1N>Dk<^r#sX5okw}hm)CuGGTG^l}-Rax9e+ar6*$gl|s&%2}-M4+>Z*g6nVS9pw+m;o~p3s^5=+t&Ofn&nx z3Cp$Wu&6+tX`65FTrxhpr``mBI^{1}*mHVs`3WnBzBaL`6y|as94{87A%AuqB2zlb z??%^ZQQ;D}$q*|@!q5Rg4scUr9K8I9twcab)KnyUW{1xq1g;Hszqcq%V82Raza1B; zjeBA^Y)$|yGupm&n@cX}jTeJJ#J#a~m#HMr<0*Ui%CQm0y@8_$Tt_-pKp%{3$}O)k zt)bB)k@R3AxEng(gc}=`a4m%^ClMIMC|8sW#LIlD(_V3xASM~E{2|9ahc$dD48WKO zCwf(3CIZV;b(tRoV&+j{3UQyi(oHIYdOrvknRnqsA%s=^G?d=k{*@--h%CdUHPjQ+o;5)<-DnI}Vk{e8xN>gjL`GbsQgTs=ZpTLC zRY)apmd&2^Y!8g=r=5mnrI0kR)6UN^Yf^OBpP;a1itmJFh;C&J z6cv>}Vx9_?f)GI!L8`-nOsp|Za+2VI|5S%Jbfv*PQi_FX1aKF3DYv~SnR^x8t;U{= zod^ghhe1AcuemB`Pk`F>%{GiEDL(-K;HS-rll$FM`kiaXCX1Y@JU@2O`&o0MX93C0 z_12Dl_pIL1747NcSG(JWt6yo)Btu_~=Q_{@%X5$EEzS;C`+)b<$9~kD_{PMh;_h1y z-d@Dm0Pw`l!V^0S#q~$0wq4eqM!*`t@2RJ3ce953k}~q?7#28ZI`yEKQ^^3VzS={yr)_F!^}8cW>)G%Pg^-~Zg+9>u)maL*N#noeqzf)RxcdrTM~l$ z*wi++C$D)fWZ1^10cMxAHlE&Fe!!p`4BDf*3+HzZ?HH^Qz|Hmc7biF0+-O@T4t1dO zm**bSU9h9s{84k#jwU{Mb@`Qt?)>EB)(tdx+{!`=hBr0ZpPt%wXT9m@H}d?cD+f(C zYqe{~CO$vDWuaz9^W@de>*ntG%;fAsR(tx&!L5V--Sy@tCujd-Y{D@)ndi@5y64Q^ zavk8O&GzN(8Pic~L;q@F&m-;W?(elX{Nsl01ol13KqvRR7tP=KnTaj)S^f7qriqV_ zZ~jGd+{tW`^5-n>dsuHN1Gr{v;ki%d&*L*+7~djy2pnpaO91Yqt26xqCyQ?> z6?I%K1V4wvV!D}?Rz5b;X-gt8wLg6YWCH9@1NPNrD!sDC zBx80>fryCm+#W9SO9M1w(k8`2*2jeF(#U^|o;%D%t!18(KLAZ7lUeOqT=dA=`|7iD z?KuB%c`>I3${#$hoJJY^wAbg+X&i$wgCanxtm5=dIV{W!gaN`*(S*{HRN4e=(M*@m z3@j4zGe-ejNhzhfn+j98-1xPYi44nu6j#+0+whoY&R&rhm$srA=6RN3(t4$OSHfON zMj^%wa)NqT&=kP%S8yaU*{mvWp!iK?>Gad)#2+jlc+kLyz7JeoMu6)YZN3tG_1NSi zSC_76PoKTI_^Wzre@*X;#w8NaA1v>G+Vb3ujrLE*XWB$N`@QqK^DbEW=ZVb|l(+Ky z`AhfyvN8U>_J*SFE%jC*oCXb_yL9iadh2In6Z2Vp%dr2L&fUbwjDk=>=68|@#qCbth)AJ>^bwcmN|%yB*7 z-86#wz7^EX^|o(-+b!@)A0+~S;z6#V6wn_o@Bh8!gSR!>myJ(1a(YB>>D6<)-!gOT zO^vn_)KiPmY;SB49XBwe$xXwPI&%%me=xpbEYE+Zv+%09-LKws+?-XLKU>`U$nMh3 zP20_t`BPUr7tS2lweMsHfHPN@j~Vo?9h2DVH{>|p&m$Etl)Byj-p*v6L zcdicxl zVcg4Wn|&32K-#?j&^ZdJJ>k!2tkoMRONq0VYTPT1#yKaE_OI(soNUUykK9?h-&1ve zL5ICEAY&du{D`C!De>S{vT)?opcEkslWgHqu~D`LmXjO=ZE@pxIFDkiuV$3ka|}@% z(Hyl|;@}GDJ#lZ6_fu6oVj3KUCC5x^Qjdyz#jj|ynRiE5ep@a;swOk|9mug1lU{H>j$x0#9^7L`Sb4T^~5rj4ArJZNu89JpoeY|4q zFFH`g#0B0`ZB8KFgsqWnVYxJd&ZdI}f4wd{p`Rj&Bgs+{vTXRf6z``!a|}{2xTC$! zoa8N^75L(yUHc%od--RvPoNAO79m4;emIpdy5RRl4jBdqY>kC(57C~`3G0XI&vQqjnt)h6Th%rMz%qh3KzU+y_K=cL-%QxRh zzM{s1Vrz+e0pPYqYaVM4?yZ=|eF+{^Jm}jPXQk*zV^gm=bms=jAJJR6qO~DOE;4mR z?|!GVu&X}y#+e;tyS!!4cTd3n``9D^OwsW9OZV=rH@?@J4$xH}Yp>jN-0u3A%e%I@ z@RtjF&+aaKr#%e-*Nja8&?F6?zqD^}z45))21txx$-52;Cf_u(gG?*5W!Nv#g~R}a zkI4mP?x{6?*=Rq$0Lef$zcYV@jnCcvQ~E29>@NMHG4b}9V+$^yS=;}t;Nw%M005lW@4RC33Hxdd0=TQT|5?ii&g?CJ zx4jVn9@(8gq2KwJiA|rL+6n|;n#kXDa97a1>zm`(Bee733l{Gwg1W*gWEr{-h@3d+ zzI^7mdut6Mx)TrnVdvnPz2$GWrUBs*y`@w7oy*(PAKh>i0DL*m-!ykeC_)2o%p{gj zM^D8QePEuVwa$hGnPe~?008BAZoX5;jDefpK`WuN;SR0bEgA>J9_!)HJlddF!Dz{D zt}~@V*(7eQ#=+r)m}^WG<6iZm3h~3KzNSQ>k_n7E0#Ld04z5b-)u;i$beMv@=s0@Z zY^^DJ^k?J=z)I<`;$9V|m&8-DjCckCB*ydO#9WYnK!g=I+P%h_PtLu6(# zR6>qM^!#b0ST;CEk;xDiQE?cuSYIR`)AN5K2AH5DGr*TAIkact3V)E>6)Wt$A|@7z z`wpAkJw(Vb1I*ZK6O<%qMljYgBT9xV0&7gcW5p#Y#>vTYVH72VFBBSt+2>6J_$tWc zx8m!-RD^ZOzSoi)IoV#-&Xy-fDly&MG-OX|dv2JDOQMlAB|jUbabrs`+`Edg4ulv* z5F{`BP;nuL5A52DLcp2)?zZew36N3Eg>LwQDslx6wGk)=$BTPpsEq8Rl(8>j4e>{X zZN=g%aSq!#wPur-wBE(rbX+K`p|bgFZ`Eow4<_|-P0Tci#!1a#X_)83JRb~)gML4Y zZ!1Sktaasdb3gzXX6m35*9QlvD<%T?#n||9gWh;PB!Zms2lu=8)Eal!n_L(-H^%3) z+8-?M-!@$RNo&exW2h~hL8tftEutKx%Zq69?Vn`n{mY!&a97 z;9ti#y6Jf7_{*FEDUoYMAwuB0Y0u-wPJ+e&NF2w;$N`@ZQpOW0O~y z!_ou*kLw-+fXmx6)5F1ZKHQiOYd|-QwNL7ITV%fLSO^Nhg^*B$xIA4qHsLa_ZcQDk z)z2(W$RnKTx@iluZu)d}YieJuQS{^5))W97HS8M-y+r`HyuGpLTOaYt)LLJqYkX57!9kW?Iko`++*X4PV(n39fp?7f*|m$e zk=%2^CeDQ*wgvk=W&&_=I@--<3{;NnzrjVR(%Tt=!d9c}RX_oG_I;S{qbBZ4#@9r9 zeT<|$8l`U?eiHLUWS5`xM6bRTb&=giHcyCv^1RZaz(P6Me=@mQV+-838c``lc3kBs znC`N7t`wPvbN%6PDxysc%bH^ycCJGxC+|3gAGeKzu>{OBS5rXmjv~{-{g?&%#dF4D z=!-t(rUUL3Twy~+F^46IMFbp%qBUu*8t;j7r~YjgAZDA|X)k<6jjx6l63)uvUf%s^ zL*519k_%kZNW`sK;)(ixEUaFQHaqD4(J`0;t)tTiLEJl{12G3t+#7Qk0w+1!LO;8{ zWQ3;3%&Jyd6v&sFSOGVG4e#Vdt|^1pVttS$oY0D-bR*)+7#AK>sRJ1uxg{Af>RdX# zN|{Ww(uwHgjyF~@n%JX~IAs#CC$$|dyh5-Fz_46l?#!6T=J^cQ^d<^f4Qr#>M}sHB zy5=6S|I`%cYaFrxMdF!e5JJzYCCeolAkwR5|#Zcg3Q zZ0%~ahKzc^quQMZ_E(;@wEyIOx6baiyj#+fGCRtcoH(bu^qRTdS2rhbYPN50w1--; zOC~m7GO;;L#sRrJWBuSfF) zJL_X$V>kZHt(OJ4^>>f|_GS$ymxU|?fL1;PAVfT7&>sTssW-tIs5@*V&oP{Q7Zlhp ze1I!S9RC#iEjh_r;@~1@+Byh^812zWv1vmPniMKibkkg6elgNfHD`UPl#Tz?iNlWS z<=0N$ByLiIRN2gzH<#*1DkLlKw;T8*UzpO40>0SD2KjCQ@us7_+?Z{QvyNQC^*^h} zI<7e=)qB?lt2^woJSNzXvT z7?AmIu8?y2g?=5~JJ0M>vlwWmqpwUNKQBaKB9yDECm#3^V3MCf7$0LxgsMa``l_*c=!gak|SvGSndpN~z@BAnLm zT+^I*(4d0=*EPpY!>r3!wKkmJnZK$vwZ_dE1fUO3Zr@+qe@Sx*a$EP2=vhbNn!RJ_>1Hh7d-W34=mN45yeNQ6L zxl~7;X?0)vwQRk7(+PX(&FOsbM@##jvOISH>;F1F<4nXj4VN+dpBuKvBp0w=H2C4k zqYl&#FhSKmH8mRuY6WVZTY?qL0AP%$129GeR+(K|!fcZ}H4Oj&tC(3|=m4NeO`?^o z=Ccu3+()zRA-7oU4xcz#tnw2q9^^s6>JnzTy_x5&o;-O*@(1I>;z90lpq8DKOA`0g?$_&~0tStPMsL~OMu8usZ-|U3ZXe0(FLN8`) zl1I{<2#=f;L4O3Vlsr{9#+J_4cU6M2z>0H>*vYi)W|`Qog7tyXKbTEVNKN}wjwTLeH{$QnN# zo7hupnkbjSb!Lf+;^==_GtQV*8eYt5w>Da*t**cXJZRAA176=4H>WdMvFjV{=WIPS zVzo-bZUnEmX;?AGDntnT77Ru25X3wPhrXx~$701vViK@b9*-#JtRdh5oWd(2yc zXN_>cL&&1&cZ_}NW_a<$>}MxtXNUc>x{J?PIan}xZ*-csq^Gh$j$wSCimKB}|Jf)1>*V{{L;*e&V3_hsy{5 zt+ip%yepeJh+8TD<=FT@vqA+r>So!+6SEgj%+3z`54VE4xzWD2)^K&kVd(1sj8hH( z#XHH0eaPypRW}=6sI9u>!$r2sO`h=L_AznMhE{ z#K}6vk&o-iwdjE7b)>jboHHt1|IJJleT1AiJUPW@ML6Jd(hxwDy22W9nAc<%3!-`Go%w#4 zIT#SNV*l{SN}4WPmH8FFYd}Rz!MA&(5TZb*NJKdh4j~6DKId)&PxO89D-|iZ7=jEg z6A`GgQl(Ki1pugJ*_xjgk#pHB0R+K-6(NM2n7tIqVZ5(a-nR9V2y%SG3kB%_tLlD? zvdX-ANsO=-ry7&+c1f*H#J7|JETGe4>P!(TUk`@@OF71Zj%(bPH;imBEfw{)Dq>|} zPB*a5F%nSl5m_%eEbg>h|F_K$_*DfZWI_vy2ta$GUheXd*TtMD&-39huhp_F z%Zy{sm_bF^5bqEHM4RZz6fkZ3<%Nx+OkrwlBG z0I*}wb7UrII5X_;EjmtM2Oj~TmNLw7C)%#d~tkpi-u3@9CY_~HO3I&wBAbC z0gcwaTH_mbG*9YxIW*o;tW6LAK@H&O;p)L!y_3}dz<1M@p3F@*L;HkQK^X19FrK|*%l|3v_TyXuV^(DweSc_0U22NgXkzL1my5V}Kyfx+@m zNSS|lglSPEpIP9JJ{N!7#3O4rbNfL^@d#tkwIooo^qoX~4YW_lxF_2Rp23~Uu8wHd zlkPjp_e)B#KMFQUH{wRq9S%s)9vRuLOPn#YGRMu6&=bb3k-`KbOB zhL#8rd8YMVC0b(FRV}D9Pu&_JB!gyhJ$JYA=g1u4n+l@!+TJTZO?r?&q)4v#1nx8B;fVbm+>M3dos)y2+)5?(yS8- zWu&kiv45+kXyOZX=Jy=-vi095R4M05<> z1hJGNoCkJV<$0dx#T)t{_iNhXkVbOiV5l%_NUDEgndtuSgjq_1c&^JztBaYZS(eo@ z9{M^1D(otsj!q#7Xm+^zq?NhT`W=l$k^@TiUn^xmq4E*C1oYG9I0BsATRe8K`qM_+ zvmye5>aJeMvO)Q&{S{t&YrYBq%UI)*?Pj$Bpn0xUwsfFYpP=Ef<`%Un|Gkxi5T!0= z1Hj@@(jeWNHHQEX>8%ujaSh;tl|znK1ZWVQy4vCV&l)B(kOF(w^8OF*yXC*n?~(oG z42QFjd@%s);I3$IIC0R~W?$U|0M|4p0pQ7q>T0sMP&LUhvzs?SLJmXx?R zE@so!t;u_8%_pqPPtvex@jI=J0Psi4``hFXlTYQt$J$RN*M*<}*l6<1GkVMJf$+0C z^BaeQYsXA4t}VK`GUp!KF1mS*?54)P*<-!7IRyYu>dX~gZshsnd-J@g#|;Gd`ftUf} zgNBZhUqmb7WB&%J2r}BpH987h!nviKyI1=GW7C^Hh8P%qryGnQg4IHR&^n>^AH!6> zG`hC#!HabO03ZNKL_t)@+da7|kW3s^@s&uyNEH}Q!IU7|t3-$>_tdHH&Xw7G}V+X5e_Lg?n$F6UUTh0jphXlVEn>eGl^umR`x7J%ZW;Zm(@2WQd z@Ur&CM|T%qb!hj$wI*}KM|79=)SE~9GtY*DAz(q_&ldLHT5l0%*EiaC)|&v(&G6sH zCLhsTdc(mxZfT62+V3u!vk`?FP?PAwLmHD~<3V@EfTk#K=R+%i2+By5=XTFLvq%7N z)!5YYaNi^i`(UQTjg9t?Ta%CMF1_L4?bkQQj~=d`-dn!A*1U9FyuNq{;Jevq5#aUB z@w@8Ha78?1gkPC^Il#ZPr=P#H?}C+sUzpee05>;UUz?bD>hjz>4%~M2*km`W9XnY4 zt={r2jaKm;sU|o9uCMfqIXaazPwfgH0-tnW>8J#9^ly5JYCh^a6xD8yp=;o4g0s($Ij?2`#o?1BHA`sJ$2AUfI1NXY#R<9 z+g%`lA;1sDrsM&8@{It1c?CWFxH)lCqkVpNVJ08$s*RmFSQ+}2b$g=Cz%~Xh8G>UM z);zli*K~~U{JPx)G(oR$pQs#ic7s^~MWk$oIYmuGwmU+9{`00X2zi9tQBz9b5qdRi z$lMJFF4T>%`}e--nb%#J12UiCVXu2}uv^@fg*jb$>VelJ@ak_TTD6cj!TRB(BPVT= z5{{-A*^$<~E@?k~(2`=2Pkqs#w?sZx;_G=REhH6Sf~lw_Qr1-)j}?bASabA%qVe+gffO z$d0HFq>v4MxD5^vlt;0Ia-w_QV-Kz3tYR)^89FB(4>1*ntjc_=kgP-H#-Qoy+;rinfVLy-djIl#}y#vk2X++S<# zsW;25kKmUQE`p^VW}lzf^4qH`5A80uX?UR4_{PM{SI0LGye=El|B=b9&jWa9Z~5Hr zA^?1BYTI4)X#lvT(SG;z(a&0*dqQV^DXU#IHg(Cw=6~FGOT-aU7t>Pcqv*$D9iQ`_&V9XPkUc;3pP#jN)2_Vni`wsf)@BL)CgP^-)5 zb{9-HYfaBx0I?!t$h-2L_Qu~|K5+iZp>K?D>R<){pPiV!t=2lPbLiaeVg_`e*7$CF z>U;L{a2LQT= zKWJ@W>+Oj4fu&$rhXC)GI_kO0`_EckesI5YO>_Lp*7R%V?;2!T#?R3i3vHkif_(N@ zhN{T^=evb&vb&AmTvRFk@Xg*b(7|D2avl=^<&;xymBf8?gI8XAs$y}ER4Rv7@vZwS z7gmx5&)8dxya66M@$@s z_)naqNekiB}RyNMaP5Lcr9#B5q8 zi8V(pCRTFmd1QAjG)ltw+T(26t}=>EtuQ?EF(k0Dp=kKU`B0U0I{;Qk*m6tUO&)^E z4)SqShn#>#LqZ7bw{OAzBzDCPPa#0@!UG?&xK<@#&JZ%pQiJNe9r7$jfn>gFaDqk| zisU^@GB6tW5SNcmbFK3T#UJpZoa<6Ox5cAN}rYKmr5PC3SVQRSU|OaA0R*EJv-s3H%Y3 zQSFw(bgCaCq**;Vd-&kq@+;@>{P@(?OUGx*t3<<(@`uO{YgtTD>p@ncD23k`w z>u5042EI5Su!?ZT>hjAM_Wr}vw(pN^APY^3|sz=5>bGsUGSNWU6FP|I_>Sysk)Ie|^i4`Bk$kg` zdP)`|b(efP|Cq!z!X`N>kJ1gUKZt1Gg|Y65d*7~eRdb>Db#m(*HeS+3M2;(o3Tcw+ zc)8~qe9kBqgCje>d19ITu`X@g(5Y^0)>uEn>0o96P@ZF!W$c~^IO56#@%`ur_{fKI zmC_8-e>!s~#O@sz5YJT4hW<4W8c`-!NqIw%Qe8@3bsAeEq>p;4W%u$>6;*@|R} z3!}Vn4Rdc5nlC(kSv(O?#}yZpe~CH0HntpDA}A{3i2iG3A4zhL4a? z5DkGm4uDa?&})?>-#@4j_d*q!#*Yn|)2T#x6*J}3!z}~ob`r#`!%X2o|GHdBNmtA3 z7`S6IWOSM`mvMHbek-rSt_DPZy)$ z!@^;)NYl|7#E1}UmXs^mNN{Ar!B_`+%a{;45*LOzbA6tW)Jvb2LGf;Fs)u)M`A<&F zj_1Q-m{(AJMR8dZADYfV0dAUL;`{gg=$t30?J3R)BIPWMM#z>wO`5*15q8zQt+B``( z2@{w?>I0dha&Do~KWW1e23NlTz*s=0@FH^ldg-1z(G87O2Wt=NcOJUB{4ee4gS7^N z4XCBy)P-AcNZ#Q;K6nK@awnX<`x3{KtN@4$CD9geRpWQ4c-c%&?ogtLd#m`NDk+I) zk5F1G*)`4NQ7x}kJPK%7ORad4-=B%JE~kW0<_g#!4miz;34)w*J_Xje*&A>a=&=%E zj70ZGTG|x-l87~CUrU--M=w_E7UE)|5*ElT!(ifLfX={f>qLe)$sYmQ?|c%4Dk=H0PGV zoqpv&S}*{5h***%GD_z|aTr9Lun4$_7sG;n**W5utB8mw%d$eGM3gc5S%yZAvAMHN&$-rx!Ek-g2@x|ypj?E${*WZV&5f43E}ouE8FovVjTpj> z%{Kd$s0O~fR<_{x>a}X@&~;4O4V=oVP+%5;#GuapGQou7)J$sfV@HvSg_({%+vC-( zZCuhc>Yq$tHglAk2w2AkKQ!SH6M{hDJHY;r&3bXF*4GRynPy1R`K0|!^>UQw(EQ69 zyiGhiBP0-5O$%Mnz7&cg$vAL>Xf=?ypDErxV1>;OAKT`xZj3*!w{$^gzDaaXz47UZ z&EIIVBi!g2EzFr@nnmR9V6;E&Vz|!PYqXsmb@P!~TuqwMm?yvhE+0`Hd(A@#c7xtfmP!eqL3~QQA z8n-cs0U*jSV=e`q8&1*L21>6Pm2q=5P_##)K{G{pql$0Ksbr5bCN{2<6F=6~= zNvJ`agi1jQRV9^dIs4udhbP!r68qQcgN0lGzygDyE$;0o%oBntqDszJBsx2H2q4+( zpe@gT@n2?s+NCn*ry?RL!)=G%oo&i8vj!J*&Uzr!1p-WyqXHx)$82%b>q7Ew-L;w- zNOqUvEcc6YAVB+uX97Ys7-utph^vn;L1q~B`H?miAauk&^CDbt3ZtPn)`<@4DRv$T zR~otC!T5;#@&+qy-Nzv@3Y=mZEtxJD{1p{#{isndbQFaHu9P@gF^Q@`Vzr69a$G6V z$CNt((fv>v|6^?8Ia^Py=wH-big*RwH_05iiF+xsAPns}L}vSA5BS?klpEq^O0vFO zIzDsh_zbt2*4T<~gWJ&w(382&fJd6eiN9R3&Fg4!FUYKfJyRSz+E-`UqogjhU{z!q zi7FE*gwbkJoOV=r{Rdosvl5n1!bIY#dc*~Bcm&H3nPM1%BpfyYLGhtOvQMJ$h=Y*` z-Cxv%%Taxa>O=4AR6d3yM3ur$z&o!ZT8V>Q;AL*a2r{C~j~O$=q_K(N3u&V*O1qFq zZjeRTYmdOhE>ht$ysK@ruv)^np{6v(g4_1F!Q|p~%bFPbBv!?d7c3PUuzD>UxG|5x zcta?{RR^>SkV-^oK0l!IW5wdDfeb&YCyu;=>?*ZwIRV8;JF}#3_AA(msTWBNt%x(i zVp_ZRcM@|K8M)+W zyr~rxj$QbDZnX$Nd$}fOC~&@hQc{!)!QlF`2yw*i8<0v(7_wyX#pwP>@&OlxHtHzE z@e_M3cd=eD0s6N|bm|4c|y3(&5uvAOy zz%Tc6h*qI-lq1T2#?D#pE(Yk746rL^5g9Szr>fgtFF}q&rd| zBWopshR6l0xHG=x4KO=7!fDC7K9ML~YDBcA^~BCCC+quHY5Ao|H_VCQ4%h~7Mk_EK z_{^fg2$l!LeLeRNI$q_4-lnA$W3r-k@d+Asm+gJ{26P_r$MC(&3+@2KV${~Zb6V?$F=(np?jr3JIXI{*NWKU zauoa(`P}>~xKsOSfE@WfC#f6Olh}I1RET`D(V2~afxt0=r=rbbATrTY;o>C3D%CCw zuaS+sg_&A?={==MOE;HbAsihhI1#R_X-ZqVBW!r#w=(1(HxkZJ9A&p_je46UdgP8( zh9{g@+zWmT6p64qk=99G$j2n9M9FjJT3L-1g`QFv#5mXuZTGxUoG|gm>~fwG9Qs9^ zYD6%)A%`Mu7mULUR5fg&s_86zGXQ{pHAzH;0{vnPF>9^3FnPH~b54agZQSb)g3Chj z&MBDV6g)FaGJ*tV%gNEsAmcxYf}`fHX+w{jU7MpE>L-@KAx1AqY5r8_6)S#RBARTu z_c?ffV!oEAki%IOD*<2BiBpYQozC2t{ioXAJ25wL2lP z_J?*)ofxSCBU57ixME#_%|<};DkB~u122{`_sil%q9|LHQ8^nSar4$z2cX0#72z&B z%Fa&y25~RjBDA)cT-nqh1pJry%s^|rWhdW?sD+ZNh)g7(lJG&TqAR?2qKLV8GqxyM zyrEk>O&L>ji?RM-Gw_gLt=i3{T_);M0%kBrAa`wIggUFsF4?JwqX6K)9j%8|=JbAeOq)vGnsqG1~Kv7?~l#ms;ub^1WNaP1tZom#P$7nC)tPqI@ zJ~0b^!g6N|0DK|`65@41NRIn3&Oy{kJ5T(i*5q8d-KcMC95v6mVGCJ)z`8U?Iam`J zg1+#)2L^d1_92iVk$F=>!6mo92xLA^PF|pvI`RzJB6Dc5F$+_|!0@v>j?>(6QM?ku zK6x6vrK#Kui#aHF>R5NAzA@n^Y!=Hf)Qaa*@*G5TYyTo-S#h04{(-a8p7(aAsa-2% zOM2y2Az1V)o+kEqX)r8SOBBQgvG7G7M$Q~wjS-JcF&WuaC0w!08WS?%R)OKw$yRgI z$V_tjq*)0Z4~#(|ezFB}{(&oREPSmzm^{p-geQLebS_G&$0Gouvx|O*F6a^_yWlu+ z4$YHHxe-SX11ZE3_9SW<78B8ICI`-nSK~t#5aSy#rQjgG6TSmLQ@OZSQW|jyM9eY( z7z_qB^fjYo3LL$?_wM)I<|=;f;w_haVT&{2l747D0N{ZS>b(Aqx4WMo`oQ)puGknc zgTR*EBdKcL^bbj!zop>PSwc@!&M$r70BGlq-rL{vE1v)ASDbL$t*sDmg?p34IA;3A zpO=>Nx7?V-ci;GyT@N_9vwvUXMSuPPSyG_F=o({Qd0p!W^yLRDsc1D?aOt0IU4v;3 zU9os$hEc3yl{q{#AovMxFs{~-6!r~MEaqcCn?I$SB;g0ZR^a8h=dnu8&~|~)T>FAE zbJz?BcI@oE<8N={H(&Mg<8Qrn%>CTCqxa7D?&1Yr`SRm_b!*G>%r-)RcQWcq=%-=; zqO5b;5Zn!35-K?=iB!=Im)S_A!SXWY?MS;&rOtf-U@S9hV8bT0d}- z;k+*4H+8`$nS%omEt-=e!qB)P%M9weOp=FpPGXX1ZZmkFAD2cExjCGH%)~LH$Ei4vhYq7c zB(%|5i%d{OzZsM6Y2(27p!nl+lcV8UiZU6>VWB~ZW(FynTb;lU-DOT;$f)Jo**NSO;I$t&z@sNDqMd$kgQl_&OOBLQTXd5lh0WR{dr5`vt)8oH$WnCK=E*kvvDwo&n5T8d)i z?n=drjdK@Zg#ub!l9y=Tc;oZIR5zV+upV7gMWY2x4%6TaMSB#x9@5p($3?00VCE4 znEwYhiS+~<&HPDE+5f0VFK*kmniJe}ck{~2H(qw>ruA7J&3?vmIwFV>cy}K2*ttLZ zi@gBw&bJ+V&A(5rk^Y*KresFDPd>Ht`Zw-EghPjFFZ|O}WEJlpCnodvf8dsUNPqdl zle?Ylq?0@6{?7b^PFvZ$WzcNq_ukvQ`l`vVetEXDlDW>e+QX+mbN|C1u{1loy0B2c z`KI|s+LV5#g8O7#Ry5J+nP?hyfmVzKVqZ_uPmC@gs>QB- zTdERsB5~vqbBS7uT&i)qI)8~@BNt{=)e2X8`IKkJ!GzU>#OVjDz(gX6LFaL=+nLc9 zaox-883AbmDUy6ia@HEatqoW<+~daKC?=l%NK2yRl%>rVkGmt3^g$g{Fg){Z{(x_( zUWmX0SQ*NytNk%HMJ~A{a~dHwr^5XWe`KR{2+?dvqhbg|IcX`Xh%}``d~yUvCutV^ zJ$s7FOm^kVRn?LTE7npy)oisBP9vR5F(M&j+8H|AEaa4 za~4`(G6QUVl6k(kgg9uQ*QlWjeZ?CZyEu3Z)l>@K)<&q7!Jqs; zdqYG7fp;JPc*1!HTdm>Ozp|;@sR6)Ko_g?{M=dx?#~jl;=9#@S&suu@tB&tyqi4rbTfo_q$D`YCnoS1A}#Z7c; zgbFic-j>NNF9)~?2>yc&&Ttn6H~>Kpx6p40`v%P?6P=BSjbuS~@7~5sUUWPFJmLKL zr#@{i>=@$Rdz&x$s}lg=iRT^qFGT@F6oxsRih;}`2NB9Ng`C|(#k>#Upay|~Y82yy ziMtq3s1T1W@ewEXm@!8@7)meowu-J!W9*~>OG&&8kh=Vp_?OG2)B)j8! z8>$ph5}qTdFNVg%UQqB-80A7Xs&@{&fQ8boNmu%|<5c?jT1S};%|(lX9M zu;`fq06?KzLC>90NUb2KV7d}pd}1aJnOLY34ZS8m$7^^QrHaKYaj`e(wOye~1bLok zSr&YmE)*U^Vqk42iBCM1rL+OCBvIb9Ap(2)!V-!oN8ndW%#1~V41;1ZGGm8Y3Onfr zSy&j;L^VI*_k_~`f}*)qG)>HYU)X&8FUE`fbI+asZ_l|m&+%_w^nhXRPEE4+2zoHBx??6ER_nzKx**XV)^=7vN3<~KJvAanDL z<3Iet)E&E9QuCIoosnTti-`<*MN|NSQ$j@{XN)*tR0 zYv$)a`QV2>cyzksmE=Of-?&CxIrdo91Wy16(V1eVtKck|IGSf)PlBRlwn}FrW#h8k z1HM3y2nUrG>#T+q<^~0P~A})-%8vrce+}OzOPj z0FEaMgN-BCUm$4YWjm>IR54fx8M0iFRQ5Qf&2;LP9kK*Ms^Th2-2(>~<)*-!3&V~& zpdtAbsga(G>tRadQS#hQ|WDPY*XauFS6 z@jf?31d#4s#FBTrnx$kNObAnUEnO(I;AH=2SGlqb0KlVViC|O=|i+94hQN77H0(;nbG}X|pvh5b6bqU&%DW z*a%|W1d74&R>)=`)M_`yb5Gl2JEr{Kn>yHXD_(A&1U|4&)EOy-&x$erN6kC z{p`BQfBM|)!2=Bdc<_UlU-SAquDxb*rIVd?*5Y;7PJQ)DoB!g)cTG+XF28K%bD!A? z05ANDJ&$?ZJOI4-&rf>6pWgGJ)0USOYnOg&<|~(MNpw7v0|1P*hEMyw1Lr(?VRp9P z>14Ow(*DXNn{T*&oB)vMQ=hv&V=wc4*(-Jz7q{Hpe(kG{FNUWzmOu3w2Oec8;H|fe zf8~YcmCKK#M$6&T}sVWc}dyZZaj+TZD9ckUiL`IJsn z(x*qAyRd2V;0NEIKDfV8_ z@an6lPC0eujE62wPv=fhthw0PpSbF5y3jpx!|9V=%%-N5cf6-sx1px1R&#{}f^v}D1HSyhz&1U|)7tB5EVN2V# zuTF0m^j5RocQh~k*O?!DZvy~4__tP!%B|p84_~_Wn#r$ydGlYqc+ceI;Id0Me)iL| z##*rB{p779xj7F2TekL}^#=zYa>nxX#^Kyt?Zz9%zy8&Yx8BkMfM%1IvZBpvY2Y@_^q=|r`%iz!%BIczZnw67U*r1! zXn*$8M-6hOT1li9LP!Gh$za=*YKMdg_BBUY?yzLSVN|-ChB%{AdZE1v!ICoUR=KCa zbQylDA`q@ptX!yxWR^@E$X!d#k>jI4%5<@)438}%6zcww;48?LgMhKYEAA^hp&>`S zF1em_#>%BG6cS}71|{_@kZ*fgOF{tfr(<12V_;K(J1sA+4Fr!w#W`uiOz|f=^_`f} z=7}o5gJ5$kLx!lcjr>3)u%!l)qoM-7_@IpKxX1It2Zn}DUtx6D>BxnnW!C2r!47&Z zxYC=OENV(UUaWX<3;AqR59*<1>w@Ar;r@-D{0&qz-LY6!m{V?Jj*#Q13qopZFiar_ zWjVyJ!p3|66%3#W*^)eYeP$mUS#u9C_@Q?uO;#}^D(NcCmz9c5U?4w|50Ie@7K>X* zM$e0P%wgs=(*?y@27o}hsgjC^Y`^W6o^@1WN(VY4CM^S$pn=27P^yy&m@0Kn9S;n%;q>60Jd>I#7LHCl4&s&n{T zzqM4W698Os`Nksd1%M&JkAAqJxNg+)S6_I?DW{q!Zf0iq*vHSG{*a~Dz2<~{_cjWq zPd|ORAo9qw7fyf3QoEf4z%!nC;Kx7QuLjdJ?hc(S6#JX$By1fCv^be#+!oE&hgW$;poR>@wKmP4$55c zet;d zH8lW$qqeX9`HS`(^!*Cc1y7zk^+C%)6Vn@q&w1WGuFQCScz?X)Z+~t8571+DfZs%`&^R6wkgW_kiIoPma z@c(o7-hq}?)#313_rBhz&oF(4GQcoH(Fhm?L^^^ciHacPN6Z(+ph+Ye5KxFH5!9$r z6MreFfQSf+SdcnYr86)vwCRmEulHNd`u;e(thLLz=gy#h`L_7x+HB3&bFkL-N=7Je85x8SoHG13|5Ke#XxF;(`{A0H{486*Lkn`;yBngX{ z$EdIr^mDk$%V@NouJc<;$gdv3-9@RM z1Y!}31YPuhE;~2}GzfHWTo2Ae)41TusdNfkO~?n0zlj5vAOKu{Jh(y|#xi6moQ;0+ zei}Qt9BZ^!QWMy?m*Yb+iVovu!{rD{`TCW{Jp}5*nQAvysGutjjx5w2Io6Z7@^g0# z30ADRwC2G@Hp`H^uE)>FnK28DI2|UTNR?1C5rC&|Bc)=f=mO}v5`mIvrm?t1V)_*! z-Q{mbNpP_v9k#MFu_;7cR`+KjV}6Qw>+~n$irEo~5|qzA+O~LL=2q21N^qq2Af3=DY4OFS% zY47TvHobD=4`%lEHW^#t=vM2*YKsy$4Wsd%zd&uxec}1GU{6muqd$#%pL@3Lp1XSv zUO9IB2}9GSSI;|t*O$MvAT3jDpnv|{;?vLUJM^&8QVB1=WZ9=ay><4S(z4}~JoKG2 zr}W?dcTQJ#^}T<#8xhWY&+cE}F}+fiJ`D&nllJAzckfQ4)}P%v)#RV%pf z{u4$6Zrj#;_nkd2u4@|{Zk#)N>Vi*fn=!L;%IO35-={*~Vgvp2=N6rQW`D|Zm;KX{ zi~ec*>^Y@n%cnMMXwe*xVtPp2{tX|!a90}lKDV~@p$9rE6+Gfi;~clG+nVqGb=SJ* z+lGc3=gpn^_$POyINW#Nv|!|m!k8+xpP@_+JA5RKdw+1OgGE zsogK_DcaP7Ohnx4i@ec+o)L)I-5~D<(aX@A`IYn@Bno#cBe}l2_cpI1<57_yLL8l9 zac@Sk`iaL3x7mUi*%ScPKq|kycgd%_6I1J-mZroQPL^er*oJA3!+bOD;Uogpnkj>S zLb%y1rw8uxU-)=XFzv~3An0pYks+qV-h?6u-co@ouFmDgr6%A~i0#w?DM?w*RyKjT z-O`5+wJA}b|K$@26dDcL1>;6*Gm(p@2Mc30kuwZ#0yACRHrW zIU51IFS!U12u?%htPZyVM5I@tGcd9}61e$f&6C*1T{3}4D752MYQfK~#AOq4jZL}$ zWgw6v?hQ5~)sX^})k(pIimliH$M*PZzalceOu=&A&Q5_ZSVT)YO);cAFC^4Xnr%*G zuqfAF5|(NQtvm>Ytmr_IbBBj~K+Pcn0kW<9DFF-W!)*4!h2vc*bfQSVwuuh7TFV+=8mwN!9vqP;3N z9y{#tk*=;v+F+@K&p+3;eE;!74;$UOrFqMi=FOX$XU{2hcU3s38?T>z*Kei)z^s|& zw;wmu(UC0McXIvuR*j$akCYJU6 zz5{Aex4*Ap+xBMO^fAW`#vmNHa&+x89S0sf1^_#DG=24&1xW%gzR>oiYd1Kgh;tMH zKwEoq_PINg1it(4^Z3_YgWlR{@9GDDU)UvIM~TAzD<WR*0pYBLAOC`MG z^2HZ_cJtyTDwv#{ENA=Qf`M#4ct#9SM+_<6T zvWu5gDg^-e)i0sBnE>FJw+{lq$Vl;;lph{S`C;_1!$&&1DkH-UZ+i160E~_nzjF10 zsdC|&XF9(AZ!h!h=p2!a8(J>EcxgEexqku8O$iY6_cwg{@0TY8K-5sAS4Uc&e7xg? zlLr?poN6eNA;r4q+n4V@VOVa{#-`bGO5Hsb=I^DNLEp;AT3)tna@n#;0C;g-+m)Bk zPxlw!cW>8>8H!{3cNZ_Za7nt4yrD?rW33E_q*PAF%(wJL%htByP0b3Q@$tgwSaEc$ z*xTFq*zdZ4s|SA8SH=(0juNFCinzclUC1hHkD2*=A*rLNw(j#Y>!<*Jc&*=&j6KIb<$q5q^L8?j(>%x+x0J=WBrL>+!3 z;nv6$7J0E&iJaI$EKy%otp5*s1XDMch^U$*#@I^$f^WH@O<&mE+%a!V;x6s6CldZf zX{*DH(zNYs6-(w8#UKqR9#)ZGG6cdjq)5aMvzU8vQ~%kExf~YO=ebEEEDcM3CG4-< zllp+C=}w?0e*e^Jd}4okCPJ_nJ7FsumtcwgW2H5qmIFhRq7WFeh?z9%h;b-USPyuI zIROCmu8WkBgmlL%ZAhdR;lqx49~<_TjV%M#7m_E8lH*ZO_P^n7pf78g#t7H0u~C0 zQcn_5Qcaw5!hU0h2mym;6o{kRgNdm~^zXz7@h1XMl2poN6Z#^1B}icRA0Yt1Pi~%Z z%a3Mk*wC_M$s_=j%Xr%@v)0_-vvA>*iF>mZR&e`O{?ycz>@&Xv0MD)MDCtd@Pe0MV zYV{Z*ELuEC2?9W+jDS!nAple>1pp{l5C9sR#MN!j=n(GdXFA?~+zS7HufUOW zOIKHA=BzRR9I|@shMQk-3eTNWf=uTU0J^%W>GIkktH*BiAk3Rn+B&V$*hm1d_L;Uc z3fi=}Wp{6b*^HW|n2VRD_kVELwCUAf-Z6dSYb`!9yvl+FQ>zah-LbvtsVB`Bm_&^Q z3#R_zA2&BN(B>`8-}>f0rg~d@@{ga{ym-mvLl1WU_TkQ@%O=ivPyg8;-c>2XuYWb2 zF_Q`QMB+c6eYzvn2G8iRm@}vJk{pXQ_jOk)7V6X#8h&_wZM$Akr>CE2TeW%=5f(3+ zeEH?pnKR32fvIu<0Q&nHUwf@>-+je`s!0#r-(6-)%~Mn9+#sHKO5fX#8J<6XvZ={p zT_`}Co~fynkpRk5?74yf(A1bnRg+d%UW|dYbh+B>aQAPzk_1v|Mu7hQM(u4BPCl*w z?Z=MHUohq1(Ar)t4Z54*DfmN7IJjK%(hKd?Di(|M*B{++=6n0rKHdJr6;_ zcJf36a=pZ1ne)9WOm=qDMX?Mb6|!F3MmoMpo%+NDo$ajsFGpqupUJc>*ecOZxhe=>A&#PtrNg$8gfLuuVm$F==KM7%C8 z`XS({DAj>r8NhCUPS;og+>a0Y@Uuo#zIIr|kjVPDUQm`$V7*r`e`qwM9*Qqop+gs@ zJtM_!IpB`1fo2BSW0W+Utg+N5g9RBHxk0ZhrLwRA=EZHkph_{aaW6n9rpn?6bkOq3 zX5NgeXoC)&(OlEUJbKZLx1?{wBWLrdgC>i6UCzs1;N_8ab_yMkw`lmuv8tqFT!to@ zmw9zbFm!(d5*N3So({E@PXPFhPBz$2A?pb{u4S1grT0Zc0{Tpc@^bm&Fp1~152$e< z07yuDL)i0ZK&?~rjTX@{weq0Fn28}9Po+gr{Y2Fnhlfy|ofeHDV!AqQBU}RD@jGT& zc~dHcJ`l#gWoiKVIweFqzl8!qx+Vkmnk%WaL$+JxZFsE}EH9|k-`6$){OG6~`dZ}FzqZ+ymgJo$4idr8Q1Qf*`vG9?+!6pZ zH`9qH_pf`ted`vx3Vq7yeTeYOJEjNq@a);8&wO@sXJ@i~ThmonEY`F_0D9LMyO-}f zxp`Cbx4ym)5j_4_S4U^{gp&qOKcoNGznU($64VHDM%2KOVE}(D2IW_^fb3X|j1)}^ z!9?!|Ug0lXfOTm2`mpVMNK54m#Q>s8|BbDlr%X*yf5fo4o~A=_!W#lu z)XD`tXL9)%LoYI062Suia1YgZFg9A3Wjs($bBKssp(UE-QEoiK+9-TOyB?2$Fanu+UKY{TA*~X!m>VBnK!`H%8rwn+!!?CKZ8N1`K&Q#U@ns+HGnwUVE5^}*y!3= z2q22`+00A1BZm5RhFB*ph$ws?DO(SbfD$4=jNI@XN8C)`Zr$2^;m7tJ)iGy4ipl$F zth%4c(w40%+&$>v@h2Yd6z|Ahu+-6M zSD_$=V{$^3dF0`)@BPnQ2j=8N{HTmAQ?wBNd#*#Q$q8)Nz3b?x04OSTbOr+E*r*qZ zifPls#wNA4Cg+{M>p#Cc*Mz=ZJ=M3qZFpq3xaPhdAI`Mt<%=)dGJQs6$M&XwzG4Xr z8VLYb95ev{n>MzX@OIOtR)E2ov&v0PlrDZk$c*}_v!gOO(F6cpohrO9O%)s~r$@xj zs~CRhWW+HL#>Wd~y)~et!xrf1icUQwgpOo2Hzw~meh>gkCH&4e_jzt@$Jkimyz_UQ zaMGY#x#kg_h&d*Ju`$(=o@o{1&zL{WP08^m45v7J`y2DtuI(5fEBxhO?Nm7M?R$o4 zT|(=zumyNXqE!CF5A{6u+wKDo8DF__^v!=VGJ8(xz=Ot4I;HQ{pUecddc(d47qTb* zR=3oxbn{7>BjFZ#EJB{r@L%~A_rQw!O54Z8&y1x%R{Ze>#l122jgvf2JDIaBF+?)q z`9YyKTkWFgPy7gn!1NUb5cTMER1(R#+Ny4M*6_buGv+~ay};^cEjmV#<5QEqXqs01 z^Q$291NaFz&W>>vV1 zv}&|Qbjn6U2(l4?T~k&0q7eII)J%vetN`hw1N^=;*H5vXLy%ofaUr54AvEit2$X=i z1X$0u0U{dV7RH3}n3ePh|D@$zibJ;hWE499Nj1;!3^%;1kk7gg9i9B3dl>12QgZ%H zQ4)?F58k2ys}Xhv3jov<1W~b2ELikV{|AzrlvzZ*Sx7-GSMc@M8^%qbsCJ6j*;COc zPJL2TridDN{<-#Q1p(l=;|CYaSGzz92uB}11VE*!!uD-V0I>3q(WZ3wGQwd;jHSqK z+T^YhySs(heHonm-_D7WxnMDQ@VFOJrz#up`nI>fd&9rzI<|Qv@kSKH2-z9 zRjOsR{T~6UiKlG#@#gO zCInOagPkXxcw&E36aD7SX=VetX{4*CdhumjX3r_@*xq#I=N1k2J98zJUc|L{>7)_O zWy{6^pjyFdxnT4Zm+Ba9haEAR7Fn&wVkaAmSTg)@@FAn=HedqF51Ti&j*l0Ih8h6i zz=OwAY&$zD%a%=WAWpX(!E5iVrc1l8ywdjQBi*B;1tM6oRB@(Yb$##yJU0tWX{$=K zq!0nohF4W*k3D|aoHGH$?w%?jbaZJPUT%HlkuC=Z-V?*L-P066^sdr6ce#f4#SQT)&I{VLAIEG%t{)nlc$?w6@!iXRbs`Q);-7+fs}!QhD4!a z1Zr}dq@&{(1F(kAX_r$9FI25a=}f9mk7yZ?=nBuSDaok!yrPB}_bXS<$~-;y8{8k*=$&TJp2jrR4T zbCQ_2m(hXsJt*{C(VLuH_Sd6iH0}kXa_u1d9S6|yo5&=kWwlerV>1)?A{cLxjHr-? z2*4CRqY3MQs$5M{DjI_yCV*sGljoPpNVTcwy>UV%QH1-dK1LebOq2pauN)t~B>xAE zdky;TY`(%qcRuX216Pk=B954*4m7So)YoavK%818N=0xPM28ZpPoi-j9Z0;&)6dYr?ZB_c@7WS>42FQm)E+X$M-MxhEo3vs&0%#RIQ zIW?Fg073x)__hz;O!`VUNt#}%2B{`hJtGjZRenOx`*i3dGY#s&{`y73IH2>dc$X^q zgc5JnmuasMQkH`0*RdSvT0}_JF@&{NEFEiSo+eGhL&Y`scO7^9P-|;)#W|+&g7!cY)Nl;K4kS606h6b=g3e4EcD`m2pIt210U*b zYEHVktAF~oApjU1Exh)M4W74cQ_p9-r*C+;VQj2OggbUL0l&R}MRT^esn@eB`|SD^(S{3=gR_(qoPr>g{bT?or`i001BWNklspV0r(NXS zzP0Gw&2kXV~!i_>8^b2Z?`?Lrsvet`uHwo z51zbb6k%|nu~fpQCR(^~a^Aes?%fT?pU}^~kSsU;#syDH1wjIy!NgZzY1y=~Y4MWM z%0nhDxqSPh4|NoZwBo?2Vgvo_SN0j`*ElSi+-F{?cX#6nCk`+iY#Up*s>S?wzqfyQ zxM6Ix0EF9jG=Ub+?RrjHD*zRC>}*276$g*L?|r*}^Xu-HUTT}1#3f57 zJKC!NP?{=m{cMr;`iP)*+USWe0DjERhW+SX=xF^o*Eck=^;AX&{&%Kq z-@=hQWwZ6)Slya5b8JG+RJg%(ludY9Qm!lnN#MA67HO$^gQh!|Q=k#% z9RcoMrj3!~2-ru4Nu)JH9pvR@t}V(Ha(Lk-$`DND5r-WhzTMzwqFP9GqP-%?Yt4;& z11NChc`<#6Pd6nt`kJXnQ$iM2V6x1Xvv<0Vgp6@jb@buqP6U9)E#)Dow_-0|awbBD zfc~CFRW&W3+<3iB812p@;xHv+c~Pj)<{63U@me;>dr5I_63gVs8(=(;p(LYi+P3PC z{obgg$S(vxS~jpxEBzN341yZd0Jdp|mFuz*O6{R;KX;{+9|Qh_!!r!M(5xW=q1qf5 zbK_zdX!yo@6pMBTuvj!8R76I#ChwBSXS?7GCs9In>0ZcLM4_Z{G7%Njh*rU9#VspMUa+m2t^19a%B4!RN<@?-_N;HTmf}C+FCBg1qL~M`%$L`H zf9{f{Q%jdkwzMW`AOrxrb~dFA{_+WUIrtl8!L_MiCt7d8Swxs2z2=s*DY$&Y8QJY;O?vdI+( zPOLc4jX(?yUS8ieK2~UJPmXx=$PsTI0f1LtZoTy4B|vcN%`*>)Lr9T1WYuV)07o4? zeALmyqoajgJDcXrb-!;Eltj;2ipuNTj~VRluHJV~ckuXYdV>@IyyKnXl3 z?YB=q@~uPN-PIJy^lhbrH{CePY1fltH^(1~^d{$;>6f?9I3mOk-}|pQsj|5B$20%r z$dT4oi{#)?Lr=F|^9+SomV^nxU3X49_4NME&g!*aez}urlb{v3wRS%j=9}`f73y9LfJbCL?j2LQZ^{pHvk28H}tPG%~ZZ86y}4 zLa0wp@*N_5BV_Ps5wU+VoISVM8j(vZY;$dc9uYgbX#Ep|U?6sYR13ETjGF zIq_bepL9jiDDk*Qkwa(78KSg|Qj#@KGnwiZt=d)cbzu(@6R{Y4Yn5HI>h@LJ3BsJ` zb}f;)-SI&}t-d>~;5tn{IQ`2GB!x<$3S>OiPsTvT#u>i>u*`vM@ibveWzUXk$emGQB{=PzAy;|;SmZETsE!ikB(hSyr| zxP5wxbfsFj>Wam;{&>c&T}{;r4h|OA+}r)xi6n~y!@{Y_!sjnta?_0p!%_)%?P_}Lx1Hbm#y;v!U;qG^ zoGe^(^}=<}wT+Jz`l+ITpY8`OKVHR4RDYm5Xn?MexI=7ccGI-IO-b+uQVo&o5rTzO7uwzW&DVUpMEK z^{r{e2wv_Pshh5!ebbGzcWiGem9Y2qrXO54d(Hjb(LNbljjm`Lns9|{n%eMM%cnoJ z@V0=M^xjQETs|{C41vlrs9U#}1RDKYI!bR>=1R!;ov9CFmY6us*6Hh+(E-c)!4;*+D~KAw{)ba+cRcG3Lz|m-u)TL$b;22v_4Z0YxF#rQ(@+3h zw0so+G)+~_8JL7<-n_|c|MfKh_`>HGJo{|B=!(*^$e#`Orkmo^|1~w!_ik7Z0N?%g z+`I4YF`hTYzA_fZmXRnWm|CJ&yHd>-YrC5|2c158!S?jSyyu>EK&dR^e{B~DKu_5O zk{Ubo#>V{g$E;p|5i_gQ;taFb$fBw@{d6#KmX~?6dLV=6Fdg}IH4KD#x|Z_; zf;%#XDa0}1f<#oSObBZ2lDrK7$Hv#2Tpu_ag3spZYM#eCZj~Ax6s)GI1&Z0=b#3WTI5U>L3nRIh;6`z4oSLsSQ-rvd$V0aRWny!nVLoiF`vrE z04Q;+2sl5u>hu^&uUitCt=Iu-M@(W0HlVf`+BHVX>KxHcBH-VFkC?pLNwUAfCB0Vo zZErnv-rPA07cE${Xkmk>ky@t2esAEC%eMl+O*hW?$&Y7R`v4ra#EO7`Rvb9-xhppb z!2XYTZ_xY6^>Hv*2(^?mh4Bd6KG_VizrHRA*2fGSJrMbO6Cx_{+s*Cf0=aYjwA1?l z;Evm;Md0mWs-bXeysXO`@Z1sU5~M#`nyZ&xvFV|Qx_4}Es#fu+qlVQ1<`>!|;J7z~ z;BSny-V4eh;KLw8L1f&6UR`OdQE*s{PnnJ)30qM%?GIly%pe|4#i4jlgo0sNiHcV5fmcHlvjWc5$ z`O=a380@UFF<;%!^O;ZxG%HiTuNrGmJO;(nHN}7Y#QYfTOejCgjduBPqUf#ih?tj^ z)t2LK$r&@4y}2#b$#A2%@U}y!Kw_| zE%FKhTZLcJlKH({2Qe_PA$2PYg#v_Fo!DRd!VxI;GshUXrY(kR@Vy9}+|QlXPO&xv zPy{XFUo@@1`5OMUJC`W8F~`v$Nt;+9)>@#XV0JsFAW8;3YI69&tKinsrbAdI&mAEX zdZB@&T`L`*3v;1?BboBZTeq^y`8!}_6mq6%hY;kJRu2g!>GGu;TR8&a(1P3hkX7{i z7#jrysR;8JA+&TrAHLXRBNVL>iy$q7Kb>FZZBnf!Nfn9Eob}ZfNiEux%eaMo^mTZ+ zG32~zwr2iNIy#e+qWb7a5wz|!YqdT>94s@FRr4NB^`?NZ1lr06x{jj3n!z03l7#&7 zkg^KU)o~%O{QP3CkvBet#y5hpNO{Uo#i_eCx!gxNpyp%9Iv_AchBH|?2s6dX)t<8wCacs(ISnOi0Mgo_C>`dPV?SIJO8 z82N~X%@|hhxrb#WH*S%$#zAq^|DY?{fBd9m-wAq2udM3VKE`e*!^$OANBgQ_%PZBU z@vB%+$<$Qf(4W-6A{Ny?at>@oa@}zGOsrU4N#I5`@Iv$TAq3GStG)$N=+*|V4pbR` zhXt5$guvVpTZ>$Ibg3+pRU-~6qY={&e(I79h_D7VlN+44Fl5vjQbl#7+IAIV#bUZR zP%e96C=(mhniW9Fl!*!ahRA~uLYlh^Uf?ALj(i=ClT=aKK6-MA9 z#d@1Tn3(ht0HVH|K)C#SLk}hl(%0*!I&~W^J_-G!c37 zP>&(*i@)99mC6q44GU@*>{PPmX%yasxtrAOm41bY>E<(A$^9Z)9N$`rt87^pb!6)h zCNb+e=vlp(ho^9pEa{ja2bSYm1(F_z`n{-(Qosi^%FcV+P%PCH)tUve^l1(R%#xjr z6}+0h&=MOcS(bav8Q9f8-b=L%N(>M;u)(%76kpH-3sELZod{<@h=7zM*XBk6NXV7B}{od6al0jVJm_XJgx#L~g)lCVV{qadHVQ2@LC`>x?Mml@Q z{pyh){)-5k`ZcA&w_TMcm>2<2bb=QXqvJKB?XA|mMr&%#>5-U&^)U7cfL@uJNk=ew z1Q1vm^_br2q*+>CBIG0IjJj8pSOM$q?S)lvQK%V^it&{%5K^?THfgh(363#KuFGm% z`TT*V+g!L9vgp78V7be%dYC3DONW=@4Uj;O%}ftc5emRq+RP%6?y;i0odWQfjI+Id zE)?vo(XQLeYS|W;CMN5l1!S23K<@=1RoopL%OVDVR*kkmSRk@eN(eDJ#L(j&y;Dn% zbxm1Hs%1>50jbfP^=+7}7{euywTc4)^(JuuEEq!~$rj);05khRM!Kx9g?i#bAqI_m zV0NGboet`$RI+uZCmH$mP*kY0&)8upoaWb$v9&pyg+D zGM0;R@gFt$l2*UDu@y5CnVGm8rSp54qKVA%F=sQB6o}3&C;HNl!CeER)xtxcyt^O zAVP+WW4?w3GH^&ic-B0wzG^1Pv@UYet>oE`UN>?;pwIfUzHntvx+~^3fOM51?F2g_ z0M^kFni|x%f)UaXl{8pBLJGbHl^!@iRH2oRwrK!8Y{QB_wwXU}#gNer$m%U0nyE(w zspFSM<5`A9YH*MB-OkDdU|SI+`Z0Dw4L*f2o}Tr6^8rg1E?BmB;rzL?^@eA?A4OYu z*UH-?woDz09V}VyiC(K_GY#<*yFr?`KT}sMVgM{4-(7#BlH+ff2lUFA6!i%#0X19J zihG?`WX4E>;{~F+BaTr$iM)px%xu_ox$abp-d zCI7gZL;5uk>0t=7YzvioV(I5X__F|}RY6RE!>v1_M4o_5g7AXbf> zY6=%?Wq38~ERkF|sh@Z9M$hgDX zXlWY5eA*8c3}Qh;KrcDZb{l0KJqVZ6QCbc_fw&@=oN{^a$hqo}Ke<*xyy42;**VTR zgg>DnQV1+Lt7=ThQR*plP+=@yC|LJQyY%T_1g$Mg|V}eiSmNJcsic*UR07z6RO-+oA zjt#fy&{xlAlIT*{G-`*0*bh!5hMmh`c@nFp6p8b~{sd>FHG{HW24}ncB?{MvTaAEGi!b#uWJnX|aER(jdcfaUUGaxcnE4a(5I%<<$w{T!^6c4fU|cNQ zfC)x1am(&2EY6`GFyr9_;CR9xD3Q?*H=p$-b?nIejU*oKng<^D?pd;G6WC@{t%+hI zmr3=|z%!1J>XG|yyk!AU4}K<-TCc+oNZAG)PI~c>)uo`>%Vuj&B6x8(c5~TIFV>lD zf9SMs@U`=oS?CB8#Eq6Sl~A*OZc+B-E($>xLR-(r$c&%xFufz+0tLfqx$TcEh$4$T z1_;)7TOo=@zx5ih)MaMTZ|0CI7V;1Tt_AnRh6+YTPGPqhkL%StN!ScI0p^TRqHcjs zmwN%6&1?Xm7k(WOEYsqtwN2V$;vwnmxrj2Fmc*dr!A4rB=f_?806=YpilG0CZ*lAqCnls8{W|GKlv#8ydUirMqZN;O^h*XsGj%a@S<@9 zh-pV|?>rRUW*uB8%4QiX7wm^O<-*D1{N(Nhcm!AH=CxPEk6)QqvPp>$F6QQwhfpM? zJ2FT{MJK` zxQAfuAza8Q7tyL=akMWT9+ed(8JJj*=qFk-FYujzVQt&7FBn|-J zStL3hZpHI5!|1YI5XL&Q)(}HHgf->dcmHZTERom2jt7dN_Wa3a)j9D?DtOYkzOe?A zi(H0=4Cgz!?tmZw0s%YCp}XK&rzArUXKUn76G@F_Ll-Sw*+QUgFZ@cT=8Xv2Ri2iV*~WQmIrbl_n-j zBV*(2nk!awpZTS)e0_t-yy?c7x85?7!xUzeToj#;8-4fNbMLvw`Fu_w3B_%CL%Jyh zAhqZI)YJPveBSE-aM{I+Uw)|#vXm!-AKN(|O2?l#aQ;Vj0>D3ie(}2J+CoTX>E)n6 zhLo%7r#=wi8zu7?sBH>#^;AE6-p+#$9_#F?77DPtxADS{?Hfca14u@aJRf=+=TV+X zc4(b!|Jlhgs?IsbO8|JvX?^FMw+jF+zhueFFSV&+UvJ9x!a8~5FJe0Oi- zg%|AScNaKB_lkKmVrL3~(lWre9VFl+0~1LpVblNxGpJVtAU#pFRfnOYKfH_J^M5_Y z%-QW?W_Xh%AwIa=`9rA|e8L8y!=%kR?6P zi-LJF<-+4tt!}b~K5SAA5CaUwu#qU?&P^)?Xb*fzESR&bh-bmYoMn=D%J!ov<{lc`mMv6cK`wBn1YeRR9sgQ?jhRXI2KA*-TG0|X%1S#XVo}0)&jbMQk-y$~{E36x zw>AC4Czl)jrF~-w{MQ3PZ0*(=ozRCtBEsoCj&~eA__m*%6lmCB+q*>6}eB`w1`UtvWcGQGUQOc77Kj=gZX5D>W5+( z-kC7y@HSV*@DV%DylR)vg94hBxIOpvj_0PkI5=k@LtN;Hr!Fnb52m*P^Ey_Vyo)*F z{UGnz1u2n{v{HjRU>BuP1`PL|6flM^DQ6$S|a0RHd4 z&tAK>gO`~-t5m8KhX#r~v$=`p?K8D;V@o=O8#lIm`cq4qn&^8stPl05W}>$C>%{Fn7)MDmbtlY9nAgeV>INVz5@;c)c!kvP-zUkahbA(hnP@ajz;I!qHAB^W|PX z%#ltJ$hbE~0O`*GFlsS`%?gnPX;C!wU2L*g?hTAu>rFn<;+iCy>O%hy+t;8JWpr9T zhe_bOc(!bW2@Pij`Py@1NIN%C$0poNy~SLW!0oW>AmvF$CvmO7Ay|pA;EB?$BPdIf zdy`Nd@qj|bszZKI*PPmQ!d5$F^dO)fC-Q0q z?XA+Nq1M95j{!U^@}(?VG4GPt07S~WVFR0n5R4g32$KF;&156&c*g9(^SWzmGf}`1 zA3g(REOGAr`>rH&3=x6I<9Vk7T6PNYr_&4H6T(R0Y^0qb^=jATr#(*y`lv86WfWU6 z&xe5%JE@dQhp^BnG*kp`CRg5$XJ;=D3hqbpd{1-$`aYt*lPO6^dx6ZPI;tz~!Ep)7 z(oo#+5o^o#4NM0^(2eJ+DZs6s)9nzh;gXT=SSuESArC~6R^~SEe0u^v(DYUdiCf}Zkh3d-Uj^EKOH*j?A|27PkwxPLJ*zk%aKgeA3A4e8uw02 z6dwC+=lD3TT0LGY1~h_Nt|wjH6RJHE;5;2jks0W39O!S1jdFBM(frYE#Ss-c(O>8T zXl<aNAuf5t5)W1PP;)gl4Q^p|)tdz99=tzIt!=D-|2vR@PnDnUyC zzRN8@A=Upx$GwiYStEd1qsA&kzM4n&JqMZX(q-7c*egGujJ6MWW;REm7s}`E$=va`jAL5-??1TgD$ zB)(~B3p)5kW@Lo(EVwM@=+&zqq;7V_g8Qlz9xaIsApjKAr$=i9iq5JxvR5+YJjmyo zWo@g2VrT4b08RwHLmofwbxXt(1)fAzgGP`bOhX15j1enSi}^@c&xBV9$tKx*uYLWn=+{uhyVY!zb0Dky`nE>#ivwKH|ivV!;hkHA_ zs;|D>`h)MyswNJJJpZ*;O8ej0U48p8!vHWbQTXgMLzO`^oedUTD|IApp#rRetZE z^{!ey*4u-9YP_Sjb z{G|m?J<(}?o^o2>Ip@6&0AKpT!efscI`lA&I2DXTDfZc#+zRNuxEVyT_W_e_! z@a)qaH{Ud?zpv2%JMyi=7k+XZ0Q~E<^JmN~pK$Wvj2Y#@f#Q#TIQzjh-QEaU`@t>O zteNHaIF!6&`fIN!O2(SF`G>O~Skv9uL?@g$aQG3UbLLI;bXTWJxMg$mU3X4<=z(t2 z;ht&bcfYr9)#|b7Gs=^bh26c4FFfD&!|Uf(6T#&zEy>3}x$W@7$0kd7$L%xj_~{JB zhMtu~A-jhiKJxw#zCLfC($+1_|M~CpL@|I5owM__cl86nCqA}c@9stbxc*1$0N~L_ zI=_0&J}Xy_U;6niPd(8wF4w<=@HZE1fBUgR z0C2(IEcvUy?mg(>@zIguoxkq6^_J;i=FSvNDgC&c*#d1jL2h!6`2}2q7cjEeYXWZJ zk%oOM;}{V^HK{6KHI5GjvSbCWx%@i~8D36^Qp?c}I)-6vd_Rj1M9x|@5!=hcUe%0* z@iM|c%abA)GS5UlT35hg;S7Zb5~a!ZU!z)_WB~|knlq8_>67FM$=g9qhJn#Fdcr0y zcOKVibdWW{(GMnN+}$m1nmRd6sM*r2&m-9V%n})Z5Wx-YGTd=T-^8Rry$r)*K@`_8 zPF)TL_0^%W7i9mB*1wG5PAI2o_}Cfe(MO%3m{!biL%kdd6tZ57Pn)35^Li4$C53e4Yo<1QgdtSQ>nzO03UVrBZoBS zNr3>xWBu&p>5Pb75Cau1gKl{sM+Ce?mY=bJSir=FQfB>tS)Q0m_mD$_5;qf;{{ayT zMMP42eY9vr zLUcGfs2lbEb7CVXrgoCFGug5P&`>BeG&VIiH=EEmyx1c!0sw$rJDa|C%|1uJwc~F; zxg7vHyQ+8GKJEM0&0&>mHC`*NTsc~7AON`c?w;-2n^No&fJYzgc1U*4xv!_kiCbFX zL+8A{X;bssXF33&sWJKN<(rr9H<1?W?4&~v8(p<}^y^=n|J#SV(#%DRr#^f6rp~Tv z`g7*Y^2|RSYG|OZT|3|DKyxEq^y#g$W|yl~{Q6hsKex8MrT}vY=bZQY{P_VSr%x|` z_A-UQ+9bqQkUl)nkquTD5xgbDv%MdT*ms z_@q+?Rva{*KF^$0nKP%90h!D7!bM?9{_C~#ox)BNv*(lmpr^ZX_PM(ZAf4FGJvgK0%(A-@4;D>fsEBLe9rpXaC&KC0#*$F*fO6h=z$CP^VR z{X3@7g-^mKKZVSuf5pnKnEh5pxu%b8TSRX-V=@r}pwUbR%IjHW z2Crv#7DVyktSnlvk7}w$$Kk%jGL(W)0vg9>LpOy6BPx?ZJk(bXSXO9oA`w^3;TDFG zSQe^B)bO1K6d8j`7TN!8Uwj>2kD=m}u?vgJcg?+LMF88I0yY-WE06AZY(qVg*# z+iAr|gS_b}GR?|G>(nqLl#5>p5(1*6nj|{bk~+c_A@={oVGfh9{PSv^z?V-1G+pGuEB)cwM9?ErM;mo~PxCNHmV{r7Lp z1AuB(EgqcmuD&$xeeT(|d+(Wc(7~g}pD;9SdiC7%cU|+P1t3Ru#X;knHnu$YKxegr z`yDWu`v{Drg(EmQQYY&2A-_JGcCw|1qn(yZXMr=tqQizpw8XxA#=4`eFg^8%Q?15UV%w z0F3#sf$d}BGmDw}9K|2wR%5MttbR5R1(g+_tMq_nDC}&6va35KGXU0XC4b>JIt9u0 z`%BUeI&Z>gIQB8)El+aO0@*@nO`!x-i>KZ8(R&D2t3lhS8}4PWEo4DSVj{|76n(Uw z)7RO`Yy#hqn#ddX`ag3sGIE>)G(a~$3fbi;3cnzbYRrjX^Ci~LJ*e+vM)IczkswsS zXXI?Ii-{PQ%8+ETd2~NYGbdofO(5#e(o?92wGsBlAT&WNW96)_P$(zHGnxLbuIG0n zRMbx)U8D=McgjhNZGzG)x(6v_LCIzl3wL8nRJ~(#WL?;w4Da@0b!PH%G6>N`XPJI;nn#6AKri2d3am% zb!X7T$5&<1UG^1-b&&sj;=d$Ll3Yb~j_2fu3M}Jcn;Wdh5iT#m}{M`{U^dOlIP#(aymZ-Vr#*6hurKm^%}ly zad#YlURo_oAhQR2ey*Tsv4H`;?($uTe=gW)@v)+?oQ~C2}u~@;;}?_>RGwMKrR3T zkg&TMCgA`>(_+V|rC%~szJ~?1+D!~q8u3K#&p#|Y+)RILs<%3cO_<@ZRH&f>{2vf3 zt*ISSz(ZP1GfNI}>a=oD(Pu#mDDz24k>9QJ7m=TW1bloT<$rdVouYDL8o4$#uONr(%Kzm>di>%=NEY7PPh9G>ic88l;oGhr6Olpa}@9mM5KwBkHt@Ay9}R z0*UytKrujYsN=`48iP)Av8ibKM4)|-TL0hWR_2|$hx&n$R(q>$V2jyZ>G6Nm{+7C+ z>q>ybvBTv#bf9)q)?lLUw5j;S+1RoRRC5-Pd z(wMsniFB&Dg~7i3>mXU$fY@mmfgAyPbYpP{ZK@r9mVvqc5#CK_>I)z zC;2C4@K2k1aI?mN()B_tFdM%B6vgZ^{`*<;k9Cv2P5Yf&UA6x6L(CYj-nFTfU3>~t ze#;54l~GbOs@G)k0;Z{DtFZwKg#sYItcc_-1AH6vb4cn@^NJp+8op9q6sx!Bze<5# z13&?3*|)g@`|mz@)Qi$(5FlB+0j07s_gV38Y#6)mga&=*qb=E(>I~EV5HqKyc&AX9 zu*Ge>d_zY@&Uew6gdcFi_K5o?p#aEBCI_%s;v-#1QvVNLaFijjizCG#w1@8BhbD*J z@sl^Nc1z7o?yQrgOneWd;BW}^xp_ZG)Y22WTDTws7Jt}&XT~jQhvDgm7Cu^bAcTO3 zsmA*hO%~Lo_-qazaKWn>9@U0PV{wj_5g&YEfMvZXD3ctF{~bIreo&`=Xfs~Cf3(0c zS?w)C@DE?z@8fqj7~*P4Y_%BPh8*HQUMgwtLZD8K+6O_NvSaATSlcH50VsKD0PVdb zs$_r?-Cj-GWan4+Wf+32`j$Ws3UPO^_;R$To@3vbXf{t9K=@B^5k;8QLKRXhh+x!P za!tHWSTf<+d=G{&+|HR_09Z9c1D>|G2I7Aq-*;>TF0{9)_0!~?99sSbjeTElEP(>h zs|T6Ny0E*L;{oyvHrUi90Vh{Bz86c&eh<_auA{ydLe=!=D7vK;nU9$UGTF4LYF!|( z-Jr!A@jtNLQ(=3n>$tm?^HN^bYTUxenKv#c>FHh#PS^mAbJn2^fJ<8qH!lwm-WybX z-FBaxeTPz&mv0>s1zYD!D(LHf#aXXZXT(1JdO3*$C1h7?W$VN~)h=7>af1ixOxe0% z^(tVJ)_=xAM$N3mf&uwSDwY6c`s%0@z^*v0FjsjdwCPNSc^o;;! zSGA6g^8HH%n7$TOYe4@8SitclU7f*BB@yKQzH#ZEJhe-r*_T^ef}v$O7$6)P97A`| zu!$J3>eE>4Rya5-m&3bEw||PxfR%)PHk5RcO*bYN40XDx-M0mkJm%Jvk0(1%#{sJy zd6sw9n2HTMD{Ue5AP^P0+UXU4O|Ksrl*vT>7?6$yoz`|2m2y4rGODapaGYFoYkxcKQKu5*dv@TZ z(SLy8l+%qpBRT~O*S-5x&@-Z>x)a&c$2}F2=oJIl6 zRWa~!g@?jIWu~jch)6&V1c2kT*M`u0dPf>__MwwQR`gJ4VC$9T>m$$K*f?x};dIVC z91V)T?`hgEmYv1ZBq zWxjo$ej^S=jF>B^to*rKmwLR~PL7tS9YYQHR41rf{q(Vr3f^>#63@a>muk5wOCK2(_AkuxRJtSrAp2bL-YYL4B}vluD412?lp_bvYKY$*Xt z<&t$$?PECM3I9QZ$0iK2kuMw85GUQOo!enIL1oYS@{**qxBp)82QA-@FI@` zsVn1cdpZETOQhuL=2NW)F2_u6b1Q75^md4n2sppxC;niy3TnNE;&+mpt@E z@!%KKU~tcP1sJq4wsR#{=gR3xPNZT2NX-i`=J;>>t~-dnc$L6jnVpgted^w!)TE+b z>O#jde4OH1Wr1u*m{x1yQ)~-^;;H(Hz`xK9ArI zv9&`Roxc>`3YMhlla{=t2fKdi8GBdg&*H`XR%hhKjFu3WiyQ=^t_6&ZiPsHmv~n9f z&mB=vNWgATGeag`LPvuGY_}>!&p_SOfLo`QWoru~8@99J?%yYg5goN}SKkStKyZdI z0GCA7X}vkG`Wqg=-)ZE2Zg1bfxBh9gDB=p}vVJ$yW`>E3B0}3%9nu`9K=A15s5(pW)L5_{j_KL<&feak9DXfUvzL_Qi(57DV?QB|H ztjB>s6tBNm-}Z_{wr2-GjwqLNwILdDM9!nD**omKAVmFl$Oy>v{i`*95>pS=@>o7u zH5&7RDD9Idcki;eBNQLsPOtQ%FCkR)x4sQ8&SSgQpHoQa zif~xMcfNGTSHK%s*l_pUlC(>MPNylo@gZ-6%rt3>9`k6Do^E|PD3rEh!tSNq@-`FKAyHq5pqfvK_eJ}e||3zr>pMs={DqK<#T5Q~J zbP>@S2`6K(6%Sbo3l$U*{G{_)S>@dm`g0{u4}#gZhoi=VJ?l#H3v*QY1bSL)bVLB( z9-sR_?1GA8q~pDA1i3GxGYIpBhK>f*`@S5mS{hmY{_l3I2i*l-T{;z*0K75$`Te z!rv@$8IwUCYyL`<$ageDTS?$Nk_|u_ET64=Mnqv8AToxS!2}o~I%+taqIkmO=Ha6H;aY^XjNe5`2p`zTf>a9xrg#gwxaMq& zT(Q9>K6XlBvvJMk}txy-+-M z8pgT>H}+3b_GfRZb%^q;RwN(75-90aNE{l1-uk#_n{7)kNoqQ!YAg%AsITZu!UYyR z{W_>jnl8U+IQy>83dxKW5RIj%$yvzSz;=u?z!Nl%3_mglpwWGW$HhWTb0K^Q^yd0 zXUpbB(-Esqq_hi$Er>jx`p_F85?Wl(`uQ>x8!xo|oh=Tgj*ta=FEPSfRAzO`%TRs> z&*E_^PZeZ=H|6mGv~Vm39mwM#HwRGHBQZXw!=OaP_o8JPb^;R8BQs-vW9nfnX8WXbsgysQ>Dq>{QAXbj@k?AbEF+Zp4ZxD2o|vi z43bA7_RWS;hZLbT29T zc~5jb-4nWApMV^*0J{}5yi(!#tm8L>`Njun#}1w?LnWq(k3xop1)%jTy(Ct0BR%q@ z$*eAlBjCtSXKP+=ZCy`eygqFN^m7IU!qgJ_?Bri`pH2S^@7uN=YKLy2O;@5U;3jD0s-x^|kpmj*=OS2zLa}L1 zWz_1hZPwT9cfYAAX^^p}odXGU;M`n)Rb6v}vOHv2p5W|)Dpa7)Xx%hiFF8}xa1&H>Uzx=FkZ{&YqHzr zk?{f9Gz~PChUmUjNi{|=uPwPTB>V^^dq$^T%BEX(aB$%uQn#Aw97EF#)2W0AEj}od zd|%y20bmE!P_(LJ2mHWq>KV4+(5H1=#~2_+$p2^o*xFyySfSzz0Y76>5*m1&CO zn?DZb|155V^vM#LNd1`aG%gsGv5L)kRIQqYJQrcCYSr`Y3KD}X99$bQThiOD52}H! zEglPh`S^Rolw?28*TH1U9?&dZt7iqkGbX0(E3JX^;vi< zS)C1h>A}@h=;(7_rwOuRag%wNLSdRY`J+I#uP7+3HYiQjWkNNumbj!U9&DJfbzyRAmOa z9LRIdIwEYl=$1n?fcD`}1w`BpYZZA~ut4JmOA1b1>Dk^Z`^W%7Cg?zSDby3Z?Dr5T zP#I(Te*tljHA4ZX3rHK3!=cx<&3}*}HVlfUe>&|BMnh~7WT=XFe@yu?e{7bvKAM91 zc4FS4)HF-^Y~n8yi?zmt|v?`lt2bC0bl z!g-bu>brfMW)V5vvCj7K(~+BjJriS8axpj+ct2`0_REFe-6bN$MUX2aTZ@E#-XIc* z!zo7b=vH-eL|#UAfc@Ta;4wDJBJCz@x2OypaX^IsINnGWv3_ ztZy5i4YkYO%-=iyurBf4EpQu5GCrkjmdrj;zLPYGFuSL{TMT6dvuV9To~+cLJQ@v@ z;F8E6$8riLa=**p#W2nx9*kw}t^&(m_EhhyA7VQ4MXKH5GR zE`hJ%+G!rC3WZ^#gTS~3MeTI?pmt-?1SQd^=y-L5t*Sr#L-quYiRiF}^Fm>O$2t2T zE!(I3pH!GIY7DWlI6_}*Lp&}3F#tZ75~x4? zf9UL2K~*X)6rhvI#8AFA@VNW(vpd`x>dl?!{V}nY&;Bl(6tWzB^EpHtFbnF2xINYa zU(wHe92^#KYPC8)hnAi3-d^#$zl53$yeg0Y&s-DcxMIi3K51yBl7TW%bwKAEySB;I zmZ}P!zP`TwEFT}{E>9~52a1Sf3=0}L?#};eqEy6G0iO$}%)rF^0g#QU>p?ZqMz##q zxnI{Q%*s^v*QdR{+u3s3e@4nB>FdzY1eNN9BrMfF-52XsIK}x=aimwxc#?gGwE+bW zHY<#)z?MHhhmq=9e)=sH-lKNVaq|X$y)OB=pIg$WJN;Jz{lNK?Wxb3_Tj3>hw$3u+ zb9>XO0_WpH&>gT9vk@?^HBDf}!87v_L|9TJ#c5?dy9-a)KM81aq75<^*_g6O$;ECDn$=tyg86y9X6f*nn6rY6Il&}}O zYE=N&x~#(O_gbsWS;U>&n>S1^dzq>BwLerwd$-0nciOxQD`+>fe5O<=j-2$Vr$MSl z4VL?E4cUNrcIW)61IJ^zwZ|wV|5t)8&GWWGmr=H(Y*^{56r=&?xytYV;v|m>($8Gj z)1GW38;Kh43aw)%^K7>nnwW^XoLqHH;q{+HhPqN-iz5Z0$T{Kouuy3z5X!)%Gx6P5 zMLNx%=+GEuj19VwbXt?fejk2l8bnK&t#Q4__O4GZLr9~fjo!V$GubSHXH;6Z!sw74 zKah#juwf;`1facyV5$K?C7$1G_|@bY4Rv9~@f;SvwK7>BefA(0%XLr)Bt;T2^utA9 zpfx`o-Lk-C?Y#tb!tLh!i@O>62_AB1lqyBaL<<77000?S93}%OK-f)Eg*f2uiB9kB zVFj>@pvm|X1YtwtDK+({rX;N{X8iOR@CH0zw*B35QB>qs&>l;mSG9{A^SUFIU9^wR zEXh%S{8o@RCR=t{4>0)rX9GI7FSfUy+eo(3u{ge*lYaqr6?K`d0;r|g$`j44_;5#I}5PXD1C<@>stl78>Db>P8T;@Zn^9i*1U?xP!5xTEq;J| zduwAo`;E7dicN=a)24KSA=8V}NKjGUsaN}=R&3@D0A7?h!gu>fH51F#6`k#Lu@Try zQ5*^o_`Ois%Pwk$m;Uhx2p3cYDo~s(g6nH4%k@I`F;w`jT)Smnn@*Jdyl{;eJD4Pm zhdSaT*8-bB$t;d?(ze7qkPMg zR=qHY9wq)8b+2$?J&T5_u4#iGu2Wnpqjab0W3J%l`2{VHSVG#k`?Ya!Anqr$#Z)s4 zH<;_w3!Zq(k?K=df~1gVwiVu=Zc3Gu7@E_V2ML(#9Yx9wdtu=v*ezrX@zrjP*jJNu^s0$T!GdU`~; zNY&`pp^RqCe{2x|o300w8}^x0BB$2DxRqU448trvpp9^vN0oF=q^=%5A!_zGc~`mj zFvxIh35BZr|KQPmFdgo;4lE4uRYSbr!y%L{%xCo7shi|;qD zY-;jd1OYcxkxqfGyWTKlRW!6{7)H017Db85-TU_ov8>f_lVyw&ho-V#!GcM5wG3ijYR594eKe3siM@}H zo3*^8?IuX#t$b_ANPgvix6-=r%hkC-XL7C2{({hP^(Cs zS0MQ0F#9`hBeTbp1TR)uCcgy5s}8p$3K^_33fL1{Xty%eXo zs_Ck#^k@O-6REn4_7;2yhHT69}4^EYEnZBH|*hvK}<-?1F^? z;DRVwa6>7D5%`jXlfWu;nJShlw{7ZtuA-i#?9mbvy{2m_hwsoA-DbXLCW0=sp3x)1 zTwTnt`>sx~UeppMSd1TUtgczDZRjiVSyoPC|U=m_MhPwjD z02iYmto%%c9^y?#w1yY3x@BoC^ygAVS@mpz^a3vdv;Q%P@hV7QT?F% z@)X#+2rOV@RT6kDie$*sIY$DGpHrl%666U1ary0PcnX)$8?f8a?O(J2wiwAkrfPE= zDmU$NTydH)$CebtMJ~SZi%~-W}2;cm?m!n`beBz1_f4nYpDyMd-{= z+?H%JAh8#9uuklSwiD(bl4_!DAIdrxEDWw6vX*0j-#bL-lcbV&ETPG>^>ysyL;C0l z>^d>V*y2l@7$Q{cforIrCmD>$WxVWt%J{Av)ZrKjnW+r!;orxK9A{}lZBv8}+2nj0 zk814k^jVqba1aAxu+CE-yAuc_1g%Hc;L*N}1W!s9V0MLbE~N0{f7Qc_XU|ncg$DVn zH7py62BMb92p{h~KSvLuI=?2GrU4jnfV36699f=flETOCwJJJus}{|+o+}WUDZdw4 zzXuSI8Y#7mJ9J&Ex8D)%WkhfUz0dRVx>*Osp~dj1e2lGAiHD9ut=w>F;&zf}R8$lQ z`EN;EZRK^k|JvMaFgc7j2tdcUj-E3Dv!zSP&SscIu*M^8XCBfZb>%%iuB-N&w?ZJ` zb`6iXxh`1#c&hvJxi0UzENoW4tNn)7G_j${VAVcP(=1Pt#!L5xh=7tVG27H1Du>iF zK?$8<5bXrXo|-XPcg;lZLy_rJ6dvV?iGlOPj%4KftdS}u_J>4WDrcK>++myf%eoLV z-_(M4p&e%|r9j7{mMwbcIDK*8i7Q5JzvaE!`=1G)ZXPt?9_~RjVm@HV3}V_eZC3%3 zP~it!7`xx%3M*HEX&_TMDYpK*wOXN>>Ph!uw&`Ll@@YS2JuPZ!3ch6O6f!5}aSQCK zbOEWBsBjavUl}dE*r&_PyP|94w2lu@B;vRI9G#?KJnm+w4KN|0({4-wl1crd|M8J>!UsSe| zI27BkLwiP&fGN(FzH8~zGguZ2`j5T!`**+w7-pE*2p^ub?aPKLG?363Lau{|9p4Gt z={oD&98g}b@=A&~IF=ek9j(Kg@}m36pn9Pp`~8gInX-O>t3JMk#xPil(kvD0RnEx> z@7V>LWmH;qrX|K|{2LbBN_RbJV=yKr!zG(#not+Z_uB>S<|z4gjh`lZpD9&lW2G@q zu-}r1yI4%8%ejo9$d>q%4;u>{GL|b-iy#TysaA^XzBfEduD{RL=>x$ zgxE_^b|SQ?WfaIA`@G@$Tcq@==qE!IJ8V$i0yhS$_vk&s@{1z8bOWbUW}}MC|8Me1njdqKJ-t$X zX|r(bHp_y-TG|+Wc9zPCqk4mp-q}w$C&AVMnrW_A?lD(N!Ci2Z*g(lu5`cHMM(bT6 zCR@N>o}2`0i`YZwjDCOtW;3g0Wu1eYlE-EE7pHPo*nK?CJ6bEl#&S}O!pJT&)6H%S z?%oI<-{eA_c1ZQkiRfRk&^RtOM>#Jmvo+6PmRV>7Wz*SD0w+^yT{Mh<@&n;$z8EWV zOg?go;2*7pg-ZP3l1KIeuQ{Ad2` zJfg{Q;xw=Hxm*gLs*c8S+Q91_3c=el$S72O)~s6qDhwlLvCT^VW;1A$#TB~mUKe7x zAH2I1$~fAZLphp^2Aa05d4K)(yfUxo@qqXysj?+n;*Dsl0$vV=bjbiAo5NL$jLps? zK$MuKsq)3p<+Ub3ka)JLSwBHCLd@h$K7Xd6vQ#o7H$XjY|KzqXPRW>U44tMw4%8w&Cp zDk}lkeztZC@UgV07DWwR)v>nVL`%4Po`ewmvm&p!xM7GwiFeRhYqs)P)PfADf2rHU zOz9LL2Kwy1bcs?ovaf@mrBiydi#X}UMnZMYB%4tVU1x;TpZ3c+QzV>u!nkfw#tHT# z%9k7`&h!QL!Y;Tr)ET32$HQBH$l|AGQ}0ElePO*gYknFV896yRmJ57S1Djp>c?$Km zWSCm;=`J%ud94e5*hto^raP5yXwlA5#K+&qfb{E8c>Z)EEa_WGM_mg1Be<4 z-bE^CSU52$zEUa($7jr{ z$&4q&ez~<4Ph>-ojj7N+9nyc4_ul{~3t!F9YC@DDFz;|frU-snWs?-wqMHx%+l(Zi6 z*pU%!E=wR^7~_zBqM)Cli7sju69fFpvUHye0Rgv}Arg5Uhz{`E`{B9o;N`A$z>H8o zh#x@mv7F`AiwEAVZIv>FQh6bJN~;sy+&B5DB7Hf3fT$;vR-Ryqp@+y|o@61~7#&56 zj0|X=`VflmbAjW>S{0Aq9&ieH%Li*uJB&`^^|}%7(DhRF`8JFP3F^k&Z9wV~`JC?? zydQ-$KWFcF?uQ5w%;7iAFGd8YMmH8H|A-ob2ATg62+vztVKi9 zy=r;z%&_ZkNA0kKGRZVmlnc{tjm&ZK;+67E)!`S~S&6J~zrAuxh0L6y!z2CYF^fit zk_Bt@ohka3Yl??q`1Lu@1b~Buz;vsph=VgWC;-@SB#e|r57h!<2uWjp=Ns(*8Sis0 zs(7qactEPV?AK{9Xc;T<1GoXZX#wWJ&z;QTFz8kfSCQn6v-c#pc9oc=bn=7J)knO) z<%O`jUl&q+cQY?Ht9+n3&^0H3ruNk1IP3zvtF&3iDZ zpp?9%ou}!I^1e9LJ4HI{7gu2Q0hIgGtSg5Dwb$VI8@o74%2;eo6r(tFuyqLjq-m%P{Xzfeo>|nw;B`;U}P1fw3r5J8nXg4n9%@XzN zoPy?$1A%9WVWfq(etmw!&6~)e*(UlQ0uW2s+q^DrS z9oQu%$?+flIaD76n8J;tGZ_Tld~$AgOFswHNBO2lOX{Wro$8)oO;6c0C*me5CKV}+ z)z!Q7_;-&_xA@7Q#a&}yG)_S2V`z1=!cpPkG>wH)<)fqH{!w40 z#k)<)sJ%4ubG{OovE+;Nf6H28v#dsZ9;E6)IpJB1igMoM82m7-Yn0Dg>#EDgpFrIn zcfmFpo^`2Z#6N~1{jn?}tJmb)My)!D`_8Jy1kL>C98iaZVs~8Rix0`Sy8&!DA}~ez zntPr}0xemiBeERknkB@R&)zbR*%!Q|h*1ku(1FkrDKV7Rfb)JquRrK}*lWv{C2qB8 zhu0k;uocVY-h+>ps>LE#Kn(U1!Q7gh*d?p7wgkb48bhDdWYG*X>YZx2AmtdTgK91d z1iv0xElXK4a|J9mqcFtH?y<-DWRYIMVsJoxb2DfADjr^+dq+*zF@56bGH%iOI`FOoA$Wr1^&hpXDroSqR@artV{?F4T7w6e=Q5tXVa$m^JnUbNQXZbqN z&1qy>*~esLdXA@iZ?K^6A4a}E>2hKPxmkFrI{^)ikD`Fz^yk+A$!53D(=5qHpETfl z69Glv`Sg>Yjq2zlwO>o1S8KTlnl7%EKi6Av2?r%?(lpy8>rW}V{a&F}6m>gTvnGh! zWSyg|sx6jghqIA;bL1pknqa`r=tn$v5owRjvj zwvkL7pa#u<1Lw3?izNqtc8QgoA+)f>XMmo<>R4j6&$*?bC@xE##P zY?6nINt^14H@U50a6V!(e3hbO_S9gt{#|c*bR#9u_jM(ml%bngC}_zL5lhLWIkEoj#-2Sb)h}|(jRTSxwE8$}c(wcEV-Z_mjMvjar)LPs6Sn@Ww z2r*$b2HC$$%_=7e+A0a|asGLh)m0a`%-my526w~)L1pG0MR0F;*LQ~&EYPjF()jm* z!In+|#Sl`PLuCG7Hx|Q<^G9uh2SYe-N&+N>rkOgIWaKZ9Jzm0+ISEA<_WbWQB9u=| z(RM4kH)&Z6iCi?S3Kr!wEu4r3Z=>brNmlC?or|Dl;SMfTQ3EEbyg=klvx832=nM)J z0reTII@@ywd3GUUb(2+o)9}@@{qOj!*NvKTxo(e>IJH}zJ6$G^eNZ@rzGD+*mE)b4 zTxIu_&QxpS>o|6Ue{0t`IkvVNTkfi6_`b2LV_5^X_ZG#$;qdKeIoyAaf~?7qYl#=X9}y~9>v$qOtzDkOz`|X2 z2^l@!lSPCS^Ucl)x`zS_4$!Z{5~-R<#U&zaY-qcCCLaqFKR}b;+pJ3j*k}6OE(o-G zP3ESID`=<1n3S{C(J&C$@dFAxGzOsP#E=do z3KLvaru?*8Rm(CJc_elcbINZN6G+w>9)VA)$hE5*tODX-sPFc_L!V9u@s6o2x!;t= znD_Pl&Doqgf{R5xu0|29yB5pl8%TQwZEUNIo^BVDB7Sagj?EHvwvMc30nN|PHnM|# ziN9WQhm|bx*TnjQcL`Zwow8l$St>JzP7#!S4B-48#C7GukIX?MBOR&;(>x z&5bObh@;SZ%An;Q8q%1mU5hLVQ>qK#Fv9ojHNIWA+c+A6uHRes6%L;INGP+KqOUZ$ zQ`B80UB}-K&0#gQ+i(u(HjQp;(u2W-+h0|)!FEen^0Ndtp##&qjIE6upPKSx{Qr?~ z*HK=oGkiVjC3mt@eI@$8oL%&d&cJ z5%3`()O4waJbhT6bL6k1XKB|KuKxV1I-%}+oAq|CPno@aJuGz|pZ{rkZ|A@Z27r#Z z?*DtGsCzS2SJ(2LrQ38zz0MaLuzfdel7F`;_BV&Gsov5aXmk*3u#P(_c+q+Kb)QsG zvyny&>dJY1nJ}1fZvABpr;pVhUU}4is1&fs6YzPS?G^f301|Y!g8`JZ+(tjHGUxt!i`*6?IsChu^Yc+8i?*jf9-+ z$$k0`H@MXSQ|c)yi{)N0t*|dzl#jr<=)T!14`SE+4L&9%F2y!|=V&IHnihQBVxtOH zQ81?N!eJz4OUz_<@bP(9l?Y0Fv* z&tGe}#Be7T6Alwf>1vD!rEv>`f9d_>zh|e<|CE^4(SG`I##WI*P-fbwTUpi;w>P_F zcAcO<6ik@{M|!X}4eeE>MeyM`{7D_*vb3OuVf&^iMd!QnOkFIEE*C||RIwc}3RQ4o2lJ}tmlxvkb)wdFm%_k>xLd0Uc z5W~PYZ6-1_s+O!#2Gw_TPCO`8F)?F(?iv?X)r{nvYsYXDO0uZrh|yctntV>gu690S z5QYuzBI3b%2TiX^2|zz4hOP{xYhfbF1{ihDFIm^G**%drA4}E+KptqLF**1=AFBSn zI2we^bGe+(oAk6suQ%J<@vKDacDKeIcm7LNwB6~31yB@S zH&*3&dj7rM5+Z~Nq!IGEd~on=-jW1-yD1J6^12&vxwB^y*j28OMhCXvOF4Mn7boKY z3>S{4Ck)uaur@sh!hQVfk9&h2Umv>eSTbHVxw7r1%f9wwK5nKQ$!m zIm@G@%|o$`yY-YVTBg%;fq#o{oWNQ6JIw(16V+K&#G zOwoD|>PE~?tEoQjIGKX!?q;3~+NTfgAltXw*6I;hctF%^cM?v_2=_;4gWkl%O3kvU z)tl$JAEd7VdgfBW0GRtp|Ca3kaT?-Yj-73s=GlW?YV1zdH6mW&z;4ADiu{I8bKelU zg?VLf{?Gle7Z=CgY#mn|-O-qqn9)bwC=81@1dWlQd-hx#bRXsyu z2|MIgp3KYHMKX@8I6(9}FZ3Hezqi?^!PWRG%rHi?ZU;jMZKx43yMc^xv>L&Eqv=0Z z9X{eS6*)3FeLWV+7Bu^qPAa!8KnC_RlS3lXC9%n-jVFS0c;dNpWRImRtnT*2oCs-5 z_xv|w9h39X#$r~=^ig+ms|n*bShzmSMquJj%m<;t&QPHqA|q?~08iS-7?G;2M8C;C zKpq4gWw3{nXF7N3*KJ(5SLvgWX+H=g3Dai>r|-YhR2UM!gL#UIFy|Ls2g`?L*TVx? zTT4BLem&{E_kVQd;od`S#YLsBdveWl%5p^ryG@|osb;=MufE{T zpfE;vUAuD~l1$HiSnST{yNrDhjwW%sMYiy0? z>AWGpu*6HN@r~bY~q_s^BcV6#Yj}Gd-$b7VIS^Y-i z+x|F3Q#}6(R%*JRq%S3mejJP*-g9&%lXCx-7j5s3ae>fs^fJRAdM}~$K@)*O>&eh% z6ep{vMuR4(1TtG%^dc|f@Sv8tQar_Q^rf)yMw773BBk5#pm|uqB(&dT4ZNmNB@;E< z7*2;qKc+nm$)T6!_i7ee$*n^QiBHO4;cLJG{p*e54$RkpU7*5DM}7S&amIm#U-ri5 zl44jpkI<)|e^8H}`S--$i68RCne5f;UgP)YQQA z9?P%fJpLz`IzhKJpS-2YA*qk8u|e*(xCP^Da}7#Ow+;q|Rrc2qU=* zq*lEPxspHM5xO3!;~VqmaQ+?J#8I^KHvJriL&Sf)I@AYt?m9JF4~i~p1^5=Sa;@a$ zk^J9ulc%a^T`U3CRjVJXr~pFVUF@`{D+15+1|u2Mug@SMuPy1W)#$|4Xl{3(hJ(5u z_XWGQ>aLHot#S?T7`N!inBAKXQ(X+)M~F++YLz0W z%GqER<*&~7(_pLzZSALh`p)Qzl=HbilVI4@s23Ayr&Xm)>F{`OfvU<7zPvEa!G98q zbrU}&1P@gd)C)@U*wSgrbeQozf2Gi!RwuU65-R@`A!e-eB$OnZ&*YYFb=s7LEJ=6t zKG_zb8a9scIq-|w(>~k>u)mMy zVY_Kg@e(2zv2}^cbjiX!;z-@JXCtIrFuodhyEIU_al!1yyKYl!-D^bzF+p1nKo(?n zHZ^hh(}&uH@Fpw~r#TMxkpEtqR{OR&Y$Md+G$K|+lf#Mv$c=mHcguF@a@%4XVXh^; zta-BJBgTJOHE_^9UzGJSwwtLf&GULZFB9^}_w>F`qXGapS=v2!ScKlLA5E|$!i|q= zuw!C1BT!nuF1j1^XPP&j4FWu#Qdzb=o}Na!KQ5w3b~x;djwIC=OPsNe4()Qi{JXIt zkcUoYu_bXyGfz8UcQsJ&F5rW?s!O&x14iI!-sZbu9RPj zhKM&>CVIfL2f4ti&Zj~BCuVAgb1HgCcDO!HZiy-&j>5UJ&<}<#uYAl&#DC*EC$~m9 z3_2hITSEA86L6QCh*@;hG%;uOz82yC@k6a~7n&*zC=Ho~n9+{Gw@L94o@lpV-6B`D zWbEKc&D(+Q(2~^XbnX?RjqvkZJJhmGg(kh4ZT~aP2rVWRQj6gIZnQG>htdMuYs%56zgm)>U#VI z@$0HoTlcMce0;p7ZYv|`l{^nRKi_ZShqu4-OmMJu8aLkS!yUEqMo=Jx1gRX5$|M*Tkk073u0kKK?5(=!A1>hQE1T*Jea zt?9N~*S`D}PaJd1;xXG7pML%f0Q~GHqkA47WH6n#u7JRNE)#!dQa~oEd+b#`SAW)o zMQ~Bs6ONVy2UC`OaBt*<2>l0@K?^)qCbv+|aR!Q_wS;^qWGDb5!3KpV$Qu%TNIGd2 z7*`Pq16WBDn^?s@EvNCQ&;8fT{V_iZp12F6*P%0Rb0O_%T9V%n z;vrL1>O^Sj^{fskEzAKs1cVBR?=Z$5kE{>@tEf2kkXGDF%4pae>20k>w#k}+m2AdX zotM_~R@Q3#PVI@sw1hSQ$lq*kZIlx~ytuyu)Iu z@S71QCe_JV;(qBj<9H9t*VrPNf;8o%ETe^~N!9$8BI?vaLez)4WR#=nv|i-mqgSa@ ztf?yg4AEr}DH(==tMpJI=e*oHLj-PU2RN$;h?Oxd`>d)e@J9fQA1BEyy6{6T6f*>b z0JjfyV~hziu(`JVm z0vI<5CT#@(?o(O^k#7_0o7?kM zn(%hLgSH6FpHx@wA5g=hMV^wJ_fTfbnrhVbKTh z-}w64m%jXoRtqkF(f;F(TLge_e0@CYOQJJYRimV2;`|VEa_%oXxRnxZZ%PJLix!R~yq*=el)M7LPKGrHb;DB-Zt}FSyJQ?VKKT%DYkK-FPPkr1QG8zNn zg^P407>&LZrm~jFDC}lBuB}BjgrzisjHW-pZ#s4;NLRZ%93Q3JxG82L>^K{s2+xlo zhtF++v^8`rD;qH|=~;mEMj%4%mr^*I^W}Ft(0^&=h`QdX<1a}h(2ZhKx{RA?zhoK}NAs=7i%O8uzy*hpHMJ=X zyH^4*imXs(ipkptcOYRr=W^0r?M5rx{=QqgHP_qcjS=b(CKas3oNpqr$ zx!rC9VAbpPx=Wew`XcQtJ<0Sl@kFjzjA7Hq(XojzqE07ww12dTz2K&(UHpY&|>)B z7y!8Z%Dp2al>xZvhE20`ZR25(14G7y43+|~KVJnArN|(~q-S8@mS<=u9sn=%qQ2>d zO|w>#fk6Z?aM=}mM@M{yIpqV|mtC33;1SSeSMH5fTz18j9T)$YwgLeFF1uoCWViyu zGmyb?si$z$4V&gD1)n3z;l|B#b8XSes=}a?H+*TM+KMY)w9hH+mp0BS8H^qN#w0u> za`?v^H`@$?jZ3eX8dY17X1H*;t}nfODr8WZydOSy$`HS`)I^3R{X(5{3yN3Ya z8@H{y?23IyZCQHLTX%l-%j*vw99XxZd+yU_e(C(_-+ASe4(=aZS~5dJcbjLpL=L(YOu3pmX=ymdj}7YR&2|(f~J(AUIjn?(VDZ* znc2R5@%R7m(R+Tl=F%$;B$-Pukf4>k7htzV_7(4jePoNHeUru#)2uxY%d7<*Vyw=USLl5i;ET zm358+Z`#GAiip2GFhRgr#myV$=GuPqi$ya=Q1B3+b;ZS(9$2@wORL}lMvVeX7hiH< z-MTIl6irBZpc&#O*o!aO?|8U*!z_)B83k9xtO(c;z`(_q5(;xkL?^1y0J_YOxUP#| z=y_;J;pdnku=&DE_OD&r1*Z>e%99QT;3Ch1$Pk=rLV*}_ z$-@RYPa!gVRmj01`;fs6y{NLzK3x35eKy0bU)wl8KLFri1llFv>V=mca6>Pn)ilGb zXr>o69eOE+*ov=htjSPI;pUAYs&uf!7y!74HdCYU0wn{3N-ucf-U0;cth^yarzeU3Bpl<$a(ezvmX8RA1;(V#X z+v-A9Rj&sITCKJLAfc~G{#`*r@4MWNavlu~|j3sY; z%P-G@RPE{qqbeVhe+s14|91b_)Dwf7kLsNIq`7yza|Zx)I_5WDdKv&+_xVj{oH={q zNeibvW&X6M%(LbKJek6RTZ>aFnzc^G1((L;Au~tJMF1+tSG{5 zx48AyQWecoZ56ipKY3tmZnibHraJHG)8{>X8UTL!lhL=m=>%-h3f^udU4QMyGtZi7 zwcwc-Oh5C2>6w|<dHd2UV;pehstHQ|DS}2EGq|N|E6W1$TjeT9M=Tt~5mt-sW{x+3U&VoXO zc+L=n*AhhjgQ5me!lbRrOoBCm0EMTiM_aKqJ`%}z3t1jt>Uc?;RUl$AdE)KVQyQcC z5K;jzqINgQ9KPd~-;|4r+ak^w5vwLI?#m`08`Q16l(#@P#@2xv`=PwgmHcs2!xm3O#=!#kkAYAdJ+X|SfeF{XwS&nHDB?ao*YbZ zx3Q`!YiL`>fFb*1Ngh&_2%I5ycPME5BmW;GcLoMp3(_k>~!HT-gWFfKOCnog|caJq4j5PJK>tEH}BjrvbboLmdu_# zL*Kq@;%`2(&3+X3GoL!@nyWYOer#xI$xJ;l^vO>gb=$3LDTQ5+jDGP88~^Qr(E|tC zy`GtyYyJ2~V;^|$G57p%yuOM>%1^dAwN+Tz&o8vz|K4MNeDB!YY)j1VeCCs~6}R$M zloJBnf8Xc_-*?O-j|_J@=Aj2i-t*s&nVF`$8H@HES+9TaecQhO{qdzGvv1$P)t}mY zdbhZ6#7X=SRVehsXl64G0oLWi3DZh(kV3tfgRn7 z4!$WPCevH}BtaldT(kF38e$55lId$*)#+?#{4PO287>u}eH z3cfCxtFTwpC2Gjbiuz(T`m&#Dn%9)VsAW}1?+BDf^VmUAA@-`O*X#AVy2$|ftDDrp_i2+L6oP%-&)$3pLaan#xDPRiEN|caap`09N1dX^d;OES} z^p)25sYAPS9TpBwV_Z;Y;^i)QLTc z!b_WGyt~r(0lP`H3M+Hm$!7sTd%lxoOB&9BWO;a$Gc%m25=wN?Szo@-83+WaPsBmE z;pwr9$~OXT-?sRH4?hF|?|jFx_uezEwuRBx_#YaqKJn=X0N`&ww)N(l*EQiZOn^{g z2(qd97cummr1NZ=Y88Q1L5npnMYZ?13K{?aAOJ~3K~zQjZU!DDDalnZqCB=V;csIV zi!@1nwCq3|Km4(uuHVr6)?E`HeBXB85NpZAppVGF4e|>8TMrp`N%eAaP8U?M%hR&W zhkTK$%STiCYd-mvPh3IrK%Fom}^PleyBa{0x(GiHRV*iVex)aAH%gzvQV#3 z%5Vs0!?`KbGuPEGyHU|wlqF;$K1uOe=@eKoD75RJ=(akm2&69YS6Bk%W81#1lp{+B z6rN`&+r`GXgt8hs`twQ4;}i>5;z3Pc2ZJGz4uFpy!sLq|9enFAO)b+>H$2z1QVyJ! zF{z^R;lo%)eFv;HCg{gizfw)15r=^iHc4f$WQc`QU?mt!VWMnN zZE5Yn3X_p682PxKf>uPdONH)97P6%k*$2C<^3pfAqklV5&b!Kp(-;Swl|o}w}uYvGUIUF~Pb_~#rDu{SmZ0OKRQ zHEY(a85-yvqplGE0B?TVE&%xK z)tj!r?kL@iYxhn&ZSL)VzO!jnELXDmfGVp*ion#jAADO21?xD?^`BM?$ycw+(!$mJ zPB}|6WNM7>i__|->gRB=NT)U}(@&{`u8xH6!@@Ic zkkbG^W2&tD7>z+2o`S^?8lS|$1i0=&@D5?pf)0WN5k6?tQi!3Kzgr~P5MX|9aEp0V$=)|MG#FY zh-@{g&mku;iJEDP$a)4^oh2tXfzDXlS>{#S!bg#QY;>~Y=l8xUQMM>>$QhLgmhw<12u|-1!M@K*>u$D>*K@<535q+xvNLi`K&tVrpv4pW zov}h586p5w9tRl+qG5y1IU%Yc#4Kazs>m$sHomCKlkzbt^l;rCQoG%5x7)1&gNVt7XM!*h(C``EQr%k3kk^5lXF^)m z&;&RUeKhA;t-{D3$)?uKuJ9%XD{)h$Z2g5ljmX^%D_l*DT|2X=<{`k?6Se$fY z)J$|M($<(5i2u`5VK_8ShKrrDDlB}nswhMfcb)ByEh?!;q6pfGN?NZ*gq|ueyeEua zREQ%t_G^`IH9F|XrScG?QV|2K*sLgRznPO`9f1`4;}_)kv58M$6F!*TY-XEdfqr;% z&@7zLtfwEU2rmQEolw?sm8zhiQ$FcSBMktWMDRB8^A=5<^lGG^&w$GGVG-nHAEHbY z-N$TN%e?5_Df2`}J%EYv^x@-y?CzNRwvf86*Udlow zrB55tKYRtk6G?uA`c1Sv0L2C8HX`lF@R9dUSpTJ$iOu1mNqKI{%9 zxaCCBe6o>2Y<1Qo>4OgCUTi?prp%C`AxO|;6RJ*>NQEq%B9dwhM594|6Sg8FNbey3 z2Skf$@6^n_0$}V7{VCxc=`(s>M#5qJh3GQH2$}ReBzD(sc%B@?(b3V-(UBo#!*iyx zCNWCMN|wvy0Hqw%`elDS$%iYjPD+=hRp=k?Ym$iGBD?8tNe~A~YvLp^&sO57K1W?y z){9I?%JZ6p#mh1u^fE2zeV`VPHS!j`oZ%ym7)jexuYc`H1b4GseBF}LrMt4YRVy$k z>R3S%3ZAK|DWwcG1Q3gU1;$bSK*+Z>cVE?oF#m1zT&Y7VrzX<>|3g%qqGtL#y_2Wn zQ715%lB=;V)gr(BkV`j|1e$|yTjRM9XE%e5k1dr_Imk~i{3 zEJC(DXBi{c0=xcRF(?*Kef>J*CB@HOT~tW~?#kd_F#-vJ-tq zQmo&k7-em9o25xon2)8QL4JwD=U$EgH*8XxoZ11X6Rj@ zb5e?3)zND9QC?m&#83O^4X)CiLXMNIJ7=9XO z>z9$pD76>}`4a@YHE(s))|B+1T%vjYkQ%wA+&$E9hnry+Kse2-vCu5}6<>PG{*$=< zRNeakQ3+5`^ibqs5X-M<%T=)~1192MXPDy<3j1WqSwja~1VPyqN_84T8H249YnG!= z&8?+dr=D@oxg6SkxDj?NqAv!0?_@1${N>%Xk8})x4TS;{wWk2sK3uI%P#Q~F(t4iu zkU!z;^iBx^Fj&KtSd4H+E? z>JSu=x>!k#*c~#>XId>mIv$q}lf4v(k?#zn?21^gU)%SsEru1HPIqvyhX~zXul_Yx zw8mP*tU_(D>)ORZ>i`O=iOgW3p)aseG^+8Sj@@g*r3y?DD`PUBt|p{ZRsev+%nUgp zB9B~R;{M(JL*m{jVT5t$oyfo_+0 z${19jqCvkh&|ol&9u_jqorq5(+oYR(yBmyllfhjmgh3ks$}=)kT*wXbXbFb>QuoY`4B#q z>|!|?bpk1|PtpC&H)56Y>xB^6#IUa`B9d_cI zqjx|$JW@`|<1572(qZ!IGYip5Wt`atDFZqo!E97uhQ}yPmw@H!8yys73aYn+w3IOb z@omp+1o^4bszQGzIoH5a%7neb#8UM@M8*nR()9+IC?LZwB(E4mYV;#9icR4y>xke& z5Hj41KPnvA_q7?2z^5F)pl>d@r|&mPPWSq-hUf%pnO*oQZgED^*J62hLnpk{knM zm7I>@KWl@-el)A5podv$znHXH2w>cn;y#qZi`Jz0Q%My1s@n&dr+1|E{dXZQTFtmO zn?H`sMCpMjnQn{?7{;Sq5S11tiP6FzJ7MbhM*#M|IT9FzTQnL_9#K{iAWVcPu~!Mm z(;xmg56zRj!!$l~Z)>m9y7Gc;PVnUW!`;tbz3B_rZ7$RxP||5nnSc8`c7)4@-}ObN zY*JWR2gCkKFT0A!;T`YVamuOld#46p`|49Oh9uT$=$#lC8Zk;mss+={6L*vTT$P3q zZCbmw_ln=zbH?ej6O+AG3-(S8zUFsNuC3*`V;BG8gAdU=Z~EioAN<*OCf>(Az)%(5QX-S$&ARtpjf@}BFRuyE_P#FQX{+j!jE`C zDhmB!!{p{|K<`$ycUuV%TqKd!sepbxC4fvV5bqlRFeXLIDr^2vh9+5b6NTK*l)f0y z;MW;LEo^->DW%MMaU<6@`h?iDOH@a#mY{Up@&*MW23#~(k25oV=Xnev6^Y4EDj*oxz z=v!{_VXd!jVb1K_F=7lJcl@H{Cucgy^Ybq_{MtW!RL%Cf*POEF@u5JI{bTovRKn93 zCWmb57bzx*#U^ykm6zsU?HIl za{;a2<>9UvBc!&_dB`=%uzP|RV~jDa%yxcagd&djh5e1}E;(V0+;3vYc#WJf=Ib4T z3M>Oa=>;Mby{h7pIEUsJ%fAhi7!BemGJyyM8%Q4{{Z~#>$SY16YsIb5azYRuQ~)?+ zC-$*sO2+@#w}n!RVO50egmZ@j;yb$Z_fkRrbp@m>&BFyAmOu$!F87DWwP?+tL=c!z zpzpE{A2;GD5(EH%mR}>Kw2T2-SP&tS)z~MedBduIp_xJC3Z?W$;Vi2^tlLEGRMz8Y zRH;kgip332aoZ+bD(MtnO@q zXf4V7d(9X;?J08ruy5bMU;f203-hMe6RM4O-#z~BcODA>J02VfrFK6y`1;qL2nf%6 z{=rKwJ3u(_3M|hC=k|usj+0qpcWR9-jSo__$eH4d$Rsb7OVo#}bQJu?-2>HO$+m9l zjh}l;j1g;|AMH{8x#otlfv{zq8lS`vF&b3asna6XQCJ~xH84_qAKo%x%F2^!!_!Ok ze%X|SJg8+bNrrw~FKt}PU5)9A_Sq<^E4fW!4>&`Nz0%i=q7^bAm+z?6lC+Jcdj#?7 zLd)XDVhR?Vj3G)Jje?w(qpd*|(q2y++b9Z2=qJO`*#lviH24vzcthj^+{_+kZomvv z$&@3(sLz-&PT;jg?@SBD73YBrd~+6}PDvM%cPU}*OommgM!}lRp%V3?bNj=MX^9?} zEeiOCetJ_l5HT{5H8i0_{urgSNI~_4&ekfUmbY1eHywp8MDy(WjYNZ@6BH9l#}74GT60lcQvj04jc~3! zLQ;>POhxiAT!midm7B;zV7rMc&^N^=%$K({dDa^1nlW)VHZ|4|?od&=oYbUvA^Ry0 z9|{FFJ4=hhV`FR9jICcg*>JYq!C)lVAauTO-j3-JTfnR z#njnn&s=xy#{2Favp1jhtV1t(`BYVz*S+SHUX`a>$3y!3t~)0md3cE4nVpUAYLBPY z{eR?sAeatkY73gA;DDl$ilb7q{?tR1G=dlD(-mZ`M%+Lc?I=B#uM-*_?E%2Mkp4zr=`FJF`Y;;wdv0#e%e| z{(U?vuChcNamu61C>#LDf|R6M8=rxJ+zZT6Sqve4=B`VYgfoyzDm*U;G1Gz-S-&HY za^t9pV(_l7p)U#+N~M-3xe*Cuc_0qIP*+~75i1`TWplE)m*E}-C2&no^h?ib)cgG; zBF(s{mZ`B1_007vWb8|GeJW%YxHicjVi*FUnBPdYG!vg&Vp2X3z$r<(Z70w3aW5&z z2SPNhnAZ?q%#hB=`AHvm02?w%HbnyYWQ_gHhcNUJ1;+tWBLY!hjl@a)p&aT$O3U^? zxQ>`LN9Lep$}1NOU>fWV;pn}lIq@yNw1j8Lkg?_?Y9G?jC1T2;V-f+|`{Bu#Zk{7!0y=y@FAC=(k9i96z}& z0R*@3J;gPN4p_Z`6bUOqEh+17q|qZrZsgjQzZYqb4iAov4v!2CnHDq&eN~*;2z9zv zF)yQ9Q!+0541HEJ<%e{Nt3LC|%>eMSmrqR}ZUex}UNJQ>+56c~MnClrMY2})-ngkVJ>9zd2jidp%;tUjT(`db6?-nd`~U#_ z!K+W1ni>RvPk-({0J!VU$-nx`V*ugeOZH#&$~^$^o_8MmoaY`o=iHfvMRU^)8*lp3 z#=y(D=gs`5mprj`+tMSuhX2>cw{j+tUuK)QY17h+etqh!vuD??>m58e@WB0J|8&!a z2Y>3q%b{VsLbT$V&HMKahT_k7=Hb`A?oj~vs}F47xT$mDMF%%->>NDM{_NG8zkb^~ z02mqWU3%sIXI^l4^XAU{y!qKr$8Pw-#{2GH6Yz^rSCKA!{()Ehmp$R~jI-vh{`~y_ z;jFI#fKPq)zE&$1v9GzJRH<`e5Xb)-9;q(9VqakLr#~J0(sdi|yKk((7$peu*D_PX z5thf+r8^B%v7ijBf)C{3DfKoUKC>5%rO7LT9=cH{Cd@8}|0ZwpOyotDgMoAQDSbVvvR?sxR;3SXf#tPZ*O!SjroLokpitz&g7}Lte zy?WUq>f|O3$$jt`(||XpiB|D*DvFZ2Y*}rfdS#-CHK1vbH>IR5!{V3J*7l!-U8pxm zYK~^8IIFulP~ov+rew)y6j~x#u`1tisgABgW{S9#T}+ur69!wTna5;t(;l$9E;WK)3E=U=kYrt#OJgUKatxX9D~ek%06qnBI?CV_++C2aziKNM|TMiP!w$qW~~5*}Lh+ z4WInPmj0Q`uppRqjw(nG0AXOD`qQ`WeA1KW?Tz*8d(VFEp|j4OdE1*$n0jK6d!;OD zvgxWhXw}luRgFH00su|OpSItmjLc+R;qXPrIskq>RZ^Y#f6?r`haRFN9wLoWac1LHq~ zgZP%WJxrNA_uQGY&z|}42e;jM$D}BRIt>KCX6GjQYl#Bh8eFajX*6Pl-pAw)=O%M4 zOUW9%Pex696=DbwzPv8167rkH#5}wtFPnP=1ig}ElFNpUkBT_$PHJ*3qB>V*pBVZ)Q=RxC~K~p?SDN zGz|Ep0i};bJopZSCTWNa+GGlLPVkIcQw-xn6M~CYl1GXW;ce7nvQV;LPbUmiUuGMV zAO3=BYvu)0MsG*$U?M8P${R%uOFRQet)LJ5YiCTFnZ`Nv`@M{a-VEJ0v*gWcn8>n2 zNtCb_!3}v50svP4jAgN4A=CSEn#dE5=a6f9%0DNIuF5Cya;68FDI*8}93jEBA?1MN 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

    @R?1T5-ucKJWzuHW6 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 EKg4v@hyVZp literal 0 HcmV?d00001 diff --git a/flake8.conf b/flake8.conf new file mode 100644 index 0000000..6c7d210 --- /dev/null +++ b/flake8.conf @@ -0,0 +1,14 @@ +[flake8] +exclude = + .git, + __pycache__, + src/UserEmultion/_deprecated, + src/config/ + src/scripts + src/utility/ +ignore = + E501, + E402, + F405, + W503, + E203 diff --git a/src/Fuzzer/Fuzzer.py b/src/Fuzzer/Fuzzer.py new file mode 100644 index 0000000..80ca103 --- /dev/null +++ b/src/Fuzzer/Fuzzer.py @@ -0,0 +1,644 @@ +import datetime +import json +import logging +import os +import pathlib +import random +import re +import signal +import socket +import subprocess +import sys +import time +import zipfile +from distutils.util import strtobool +import colorama as clr +import paramiko + + +from byte_flipper import ByteFlipper +from radamsa import Radamsa +from metadata import MetaMutation + + +THIS_FILE = os.path.dirname(os.path.abspath(__file__)) +sys.path.append(str(pathlib.Path(THIS_FILE).parent)) +sys.path.append(str(pathlib.Path(THIS_FILE))) +from Manager.Manager_FreeBSD import FreeBSD +from Manager.Manager_NetBSD import NetBSD +from Manager.Manager_OpenBSD import OpenBSD +from Manager.Manager_Ubuntu import Ubuntu +from Manager.Manager import VmManager, get_basename, get_parent_path, create_directory + +from config import fuzzing_config + +from UserEmulation.UE_Generic import GenericUserEmulation +from UserEmulation.UE_FreeBSD import FreebsdUserEmulation +from UserEmulation.UE_NetBSD import NetbsdUserEmulation +from UserEmulation.UE_OpenBSD import OpenbsdUserEmulation +from UserEmulation.UE_Ubuntu import UbuntuUserEmulation + +from utility import extract_core_features + + +def get_random_list_entry(file_list): + return random.choice(list(filter(None, file_list))).rstrip(",").strip() + + +class Fuzzer: + def __init__(self): + self.name = None # internal name for this Fuzzer object + self.vm_name = None # Name of the libvirt VM + self.rmount = None # full remote path where file system is mounted + self.new_crash_dir = None # local directory where crash is saved + self.vm_object = None # Manager object instance + self.lpath_mfs = None # full path to the current mutated fs + self.syscall_log = None # full path to the log for the executed syscalls + self.mutation_engine = None + self.mutation_size = None + self.mfs_type = "ufs" # file system type that is currently used + self.mfs_size = 20 # size of said file system + self.mfs_files = 20 # amount of files on the filesystem + self.mfs_max_file_size = 1000 # max size of each file on the filesystem + self.iter = 0 # current iteration + self.crashes = 0 # amount of crashes in current cycle + self.ucrashes = 0 # amount unique crashes in current cycle + self.last_panic = "" # displays the type of the last panic + self.start = datetime.datetime.now() # datetime object when fuzzing started + self.end = None # datetime object when fuzzing ended + self.runtime = 0 # essentially datetime.now() - self.start + self.success_mounts = 0 # number of times mounting succeeded + self.last_crash_iter = 0 # used to deduct whether a system reset is reasonable + self.last_unique = 0 + self.start_iter = 0 # used for timing iterations + self.end_iter = 0 # used to time iterations + self.all_iter_time = 0 # used for timing iterations + self.avg_iter_time = 0 # used for timing iterations + self.max_exec = 0 # used for producing stats about possible executed syscalls + self.actual_exec = 0 # used for producing stats about possible executed syscalls + self.radamsa_seed = None # generated seed by radamsa + self.fs_log = None # logs the created filesystem in a json serializable format + self.dyn_scaling = True # if enabled increases the fs size after 15k iterations of not finding a unique crash + self.target_os = None + self.host_os = None + signal.signal(signal.SIGINT, self.signal_handler) + + def __setup__(self, **kwargs): + if "name" in kwargs: + self.name = kwargs["name"] + if "vm_name" in kwargs: + self.vm_name = kwargs["vm_name"] + if "mfs_type" in kwargs: + self.mfs_type = kwargs["mfs_type"] + if "mfs_size" in kwargs: + self.mfs_size = kwargs["mfs_size"] + if "mfs_files" in kwargs: + self.mfs_files = kwargs["mfs_files"] + if "mfs_max_file_size" in kwargs: + self.mfs_max_file_size = kwargs["mfs_max_file_size"] + if "mutation_engine" in kwargs: + self.mutation_engine = kwargs["mutation_engine"][0] + self.mutation_size = int(kwargs["mutation_engine"][1]) + if "vm_object" in kwargs: + self.vm_object = kwargs["vm_object"] + if "dyn_scaling" in kwargs: + try: + self.dyn_scaling = bool(strtobool(kwargs["dyn_scaling"])) + except ValueError: + self.dyn_scaling = False + + def signal_handler(self, sig, frame): + print("Observed Ctrl+C! Exiting...") + self._save_stats() + sys.exit(1) + + def get_guest_os_kernel(self): + self.host_os = self.vm_object.exec_cmd_quiet("uname").lower() + + def set_target(self, rpath): + self.get_guest_os_kernel() + if self.host_os == "freebsd": + self.target_os = FreeBSD(mount_at=self.rmount, rfile=rpath, vm_object=self.vm_object) + elif self.host_os == "openbsd": + self.target_os = OpenBSD(mount_at=self.rmount, rfile=rpath, vm_object=self.vm_object) + elif self.host_os == "netbsd": + self.target_os = NetBSD(mount_at=self.rmount, rfile=rpath, vm_object=self.vm_object) + elif self.host_os == "linux": + self.target_os = Ubuntu(mount_at=self.rmount, rfile=rpath, vm_object=self.vm_object) + else: + logging.error("Unknown or not implemented target kernel: {}".format(self.host_os)) + sys.exit(1) + + def mutation_radamsa( + self, file_system, preserve_magic=True, preserve_uberblock=False, determinism=True, + ): + self.radamsa_seed, self.lpath_mfs = Radamsa(file_system).mutation(preserve_magic, preserve_uberblock, determinism) + + def mutation_byte_flip_seq(self, fs_path, n_bytes=1): + self.lpath_mfs = ByteFlipper(fs_path, n_bytes, mode="seq").mutation_seq() + + def mutation_byte_flip_rnd(self, fs_path, n_bytes=1): + self.lpath_mfs = ByteFlipper(fs_path, n_bytes, mode="rnd").mutation_rnd() + + def mutation_metadata(self, fs_path, n_bytes=3): + self.lpath_mfs = MetaMutation(fs_path, n_bytes, mode="sb_meta").mutation() + + def mutation_metablock(self, fs_path): + pass + + def _get_two_distinct_list_elements(self, list_one, list_two): + _file1 = get_random_list_entry(list_one) + _file2 = get_random_list_entry(list_two) + try: + if _file1 != _file2: + return _file1, _file2 + else: + self._get_two_distinct_list_elements(list_one, list_two) + except RecursionError: + return None, None + + @staticmethod + def _flush_write(open_file_handle): + open_file_handle.flush() + os.fsync(open_file_handle.fileno()) + + def user_interaction_emulation(self, syscall_log): + print(clr.Fore.LIGHTYELLOW_EX + "\t[*] Accessing & modifying mounted filesystem: {}".format(self.rmount) + clr.Fore.RESET) + copy_scripts_to_fuzzer(self.vm_object) + exec_cmds = 0 + try: + total_cmds = self._set_user_emulation() + except IndexError: + return 1 + self.max_exec += len(total_cmds) + for cmd in total_cmds: + if any(x in cmd for x in ["cp", "mv"]): + cmd = self.dynamic_resolving_of_cp_and_mv_command(cmd, syscall_log) + ret_cmd = self.vm_object.exec_cmd_quiet(cmd) + logging.debug("RET VAL FOR {} IS: {}".format(cmd, ret_cmd)) + if ret_cmd == 2 and not self.vm_object.check_vm_state(): + self.print_successful_executed_commands(exec_cmds, total_cmds) + return self._flush_write_crash_syscall_log(cmd, syscall_log, exec_cmds) + if ( + any(x in cmd for x in ["dd", "find", "readlink", "getfacl", "ls", "stat", "tar", "du", "wc"]) + and type(ret_cmd) == str + ): + if "tar" in cmd and "Error" in ret_cmd: + syscall_log.write("[-] {}\n".format(cmd)) + elif "getfacl" in cmd and "stat() failed" in ret_cmd: + syscall_log.write("[-] {}\n".format(cmd)) + elif "No such" in ret_cmd: + syscall_log.write("[-] {}\n".format(cmd)) + else: + exec_cmds = self._write_success_log(cmd, syscall_log, exec_cmds) + elif ( + not any(x in cmd for x in ["dd", "find", "readlink", "getfacl", "ls", "stat", "tar", "du", "wc"]) and not ret_cmd + ): + exec_cmds = self._write_success_log(cmd, syscall_log, exec_cmds) + else: + syscall_log.write("[-] {}\n>>{}\n".format(cmd, ret_cmd)) + self._flush_write(syscall_log) + self.print_successful_executed_commands(exec_cmds, total_cmds) + self.actual_exec += exec_cmds + return 1 + + def _set_user_emulation(self): + # return UserEmulation(vm_object=self.vm_object, rpath=self.rmount).set_user_emulation() + if self.host_os == "freebsd": + user_emulation_command_list = FreebsdUserEmulation( + vm_object=self.vm_object, rpath=self.rmount + ).set_freebsd_user_emulation() + elif self.host_os == "openbsd": + user_emulation_command_list = OpenbsdUserEmulation( + vm_object=self.vm_object, rpath=self.rmount + ).set_openbsd_user_emulation() + elif self.host_os == "netbsd": + user_emulation_command_list = NetbsdUserEmulation( + vm_object=self.vm_object, rpath=self.rmount + ).set_netbsd_user_emulation() + elif self.host_os == "linux": + user_emulation_command_list = UbuntuUserEmulation( + vm_object=self.vm_object, rpath=self.rmount + ).set_ubuntu_user_emulation() + else: + logging.error("unknown target kernel/os!") + sys.exit(1) + return user_emulation_command_list + + @staticmethod + def print_successful_executed_commands(exec_cmds, total_cmds): + print(clr.Fore.LIGHTYELLOW_EX + "[*] Completed {}/{} program calls".format(exec_cmds, len(total_cmds)) + clr.Fore.RESET) + + def dynamic_resolving_of_cp_and_mv_command(self, cmd, syscall_log): + try: + gen_user = GenericUserEmulation(vm_object=self.vm_object, remote_mount_path=self.rmount) + _file, _dir = self._get_two_distinct_list_elements( + gen_user.get_files_of_mounted_file_system(param="files"), gen_user.get_files_of_mounted_file_system(param="dir"), + ) + cmd = cmd.format(_file, _dir) + except (AttributeError, TypeError): + syscall_log.write("[-] {}\n".format(cmd)) + return cmd + + def _write_success_log(self, cmd, log_handler, ctr_exec_cmd): + log_handler.write("[+] {}\n".format(cmd)) + self._flush_write(log_handler) + ctr_exec_cmd += 1 + return ctr_exec_cmd + + def _flush_write_crash_syscall_log(self, cmd, fd, success): + fd.write("[!] {}\n".format(cmd)) + self._flush_write(fd) + self.actual_exec += success + self.check_if_crash_sample() + return None + + def _compress_vmcore(self): + vmcore = [os.path.join(self.new_crash_dir, f) for f in os.listdir(self.new_crash_dir) if f.startswith("vmcore")][0] + zip_path = os.path.join(self.new_crash_dir, get_basename(vmcore)) + with zipfile.ZipFile(zip_path + ".zip", "w", compression=zipfile.ZIP_DEFLATED) as myzip: + myzip.write(vmcore, arcname=get_basename(vmcore)) + os.remove(vmcore) + + def save_fs_dict_to_disk(self): + try: + _path = os.path.join(self.new_crash_dir, "fs.json") + self.fs_log = re.sub(r"[\a-zA-Z0-9]*?{\"fs", '{"fs', self.fs_log) + if self.fs_log.endswith("%"): + self.fs_log = self.fs_log[-1] + self.fs_log = json.loads(self.fs_log) + self.fs_log["crash_meta_data"] = {} + self.fs_log["crash_meta_data"]["seed"] = self.radamsa_seed + self.fs_log["crash_meta_data"]["panic"] = self.last_panic + with open(_path, "w") as f: + f.write(json.dumps(self.fs_log, indent=4)) + except TypeError: + pass + + def check_if_crash_sample(self): + self.last_crash_iter = self.iter + try: + self.new_crash_dir = self.vm_object.crash_handler() + if self.new_crash_dir: + self._backup_samples() + self._check_if_crash_is_yet_unknown() + self.save_fs_dict_to_disk() + self.vm_object.exec_cmd_quiet("/bin/rm -rf /var/crash/*") + self._compress_vmcore() + self._save_stats() + except socket.timeout as e: + logging.error("SOCKET TIMEOUT: {}".format(e)) + self.vm_object.reset_vm() + if self.vm_object.silent_vm_state(): + self.check_if_crash_sample() + else: + self.vm_object.restore_snapshot(self.vm_object.get_current_snapshot()) + self.vm_object.quick_boot(vm_name=self.vm_object.name) + + def _save_stats(self): + statsp = os.path.join(os.getcwd(), "stats") + create_directory(statsp) + with open(os.path.join(statsp, str(self.start)[:-4] + "_" + get_basename(self.lpath_mfs)) + ".txt", "w",) as s: + s.write("> Start date: {}\n".format(str(self.start))) + s.write("> End date: {}\n".format(str(datetime.datetime.now()))) + s.write("> Engine: {}\n".format(str(get_basename(self.lpath_mfs)).split("_"))[-5].strip()) + s.write("> Runtime: {}\n".format(str(self.runtime))) + s.write("> File system name: {}\n".format(str(self.lpath_mfs))) + s.write("> File system type: {}\n".format(str(self.mfs_type))) + s.write("> File system size: {}MB\n".format(str(self.mfs_size))) + s.write("> #Files in initial file system: {}\n".format(str(self.mfs_files))) + s.write("> #Max_size of files: {}KB\n".format(str(self.mfs_max_file_size))) + s.write("> Iterations: {}\n".format(str(self.iter))) + s.write("> Avg Iteration time: {}s\n".format(str(self.avg_iter_time))) + s.write("> #Crashes: {}\n".format(str(self.crashes))) + s.write("> #Unique_Crashes: {}\n".format(str(self.ucrashes))) + s.write( + "> #Successful_Mounts: {}({}%)\n".format( + str(self.success_mounts), str(self._get_percentage(self.success_mounts, self.iter)), + ) + ) + s.write("> #Unsuccessful_Mounts {}\n".format(str(int(self.iter) - int(self.success_mounts)))) + s.write( + "> {}/{} ({}%) Commands executed\n".format( + str(self.actual_exec), str(self.max_exec), str(self._get_percentage(self.actual_exec, self.max_exec)), + ) + ) + + def automate(self, rpath_mfs, mount_at): + self.rmount = mount_at + self._print_statistics_output_to_tty() + self.syscall_log = os.path.join(os.getcwd(), "file_system_storage/{}_syscall.log".format(self.name)) + with open(self.syscall_log, "w") as syscall_log: + self.set_target(rpath_mfs) + mount_ret = self.target_os.mount_file_system() + if mount_ret == 1 and self.vm_object.check_vm_state(): + print(clr.Fore.GREEN + "[+] Mounting successful!" + clr.Fore.RESET) + self.success_mounts += 1 + if self.user_interaction_emulation(syscall_log): + self.unmount_file_system_on_remote() + else: + print(clr.Fore.RED + "[!] Mounting failed!" + clr.Fore.RESET) + if mount_ret == 0 and not self.target_os.destroy_bdev() and self.vm_object.silent_vm_state(): + pass + else: + syscall_log.write("[!] mount\n") + self.check_if_crash_sample() + self.iter += 1 + self._print_separator() + self.end_iter = round(time.time() - self.start_iter, 2) + self.all_iter_time += self.end_iter + self.avg_iter_time = round(self.all_iter_time / self.iter, 2) + + def unmount_file_system_on_remote(self): + if self.target_os.unmount_file_system() and self.vm_object.silent_vm_state(): + print(clr.Fore.GREEN + "[+] Unmounted {} successfully".format(self.rmount) + clr.Fore.RESET) + else: + self.check_if_crash_sample() + + def _print_statistics_output_to_tty(self): + os.system("clear") + self._print_separator() + print( + "Start date: {} | Runtime: {} | OS: {} | Mutation engine: {}\n" + "Filesystem type: {} | Filesystem size: {}MB \n" + "Iteration: {} | Last iteration time: {}s | Avg. iteration time: {}s\n" + "# Crashes: {} | # New crashes: {} | Last panic: {} | Last new crash (iter): {}\n" + "Successful mounts: {} ({}%) | {}/{} ({}%) Commands executed".format( + str(self.start)[:-4], + self.runtime, + self.host_os, + self.mutation_engine, + self.mfs_type, + self.mfs_size, + self.iter, + self.end_iter, + self.avg_iter_time, + self.crashes, + self.ucrashes, + self.last_panic, + self.last_unique, + self.success_mounts, + self._get_percentage(self.success_mounts, self.iter), + self.actual_exec, + self.max_exec, + self._get_percentage(self.actual_exec, self.max_exec), + ) + ) + self._print_separator() + + @staticmethod + def _print_separator(): + line_separator = "─" + print(line_separator * int(subprocess.check_output(["stty", "size"], encoding="utf-8").split()[1])) + + def _get_core_details(self, file): + with open(file, "rb") as f: + data = f.read() + self.last_panic = extract_core_features.get_panic_name(data) + return extract_core_features.get_core_details(data) + + @staticmethod + def _write_sha256sum_txt(core_txt, sha256_trace): + sum_txt = str(pathlib.Path(core_txt).parent) + "/shasum256.txt" + with open(sum_txt, "w") as g: + g.write(sha256_trace) + g.close() + + def _check_if_crash_is_yet_unknown(self): + core_txt = [os.path.join(self.new_crash_dir, f) for f in os.listdir(self.new_crash_dir) if f.startswith("core.txt")][0] + sanitized_bt = self._get_core_details(core_txt) + if len(self.last_panic) <= 2: + return 0 + self.crashes += 1 + sha256_trace = extract_core_features.get_sha256_sum(sanitized_bt) + self._write_sha256sum_txt(core_txt, sha256_trace) + crashdb = os.path.join(os.getcwd(), "crash_dumps/crash.db") + pathlib.Path(self.new_crash_dir).rename(self.new_crash_dir + "_" + str(self.last_panic)) + self.new_crash_dir = self.new_crash_dir + "_" + self.last_panic + with open(crashdb, "a+") as f: + f.seek(0) + db_contents = f.read() + if sha256_trace not in db_contents: + self.ucrashes += 1 + self.last_unique = self.iter + print(clr.Fore.CYAN + "[+] New unseen crash found: {}!".format(sha256_trace) + clr.Fore.RESET) + mfs_meta = str(get_basename(self.lpath_mfs)).split("_") + engine = mfs_meta[0].strip() + if "radamsa" in engine and self.radamsa_seed: + engine = engine + " (seed: {})".format(self.radamsa_seed) + else: + engine = "None" + fs = mfs_meta[-2].strip() + size = mfs_meta[-1].strip() + entry = ( + str(self.name) + + "; " + + str(self.vm_name) + + "; " + + fs + + "; " + + size + + "; " + + engine + + "; " + + str(self.last_panic) + + "; " + + sha256_trace + + "; " + + str(self.new_crash_dir) + + "; " + + str(self.runtime) + + "; " + + str(self.iter) + + "\n" + ) + f.write(entry) + f.close() + + def _backup_samples(self): + files = [ + self.lpath_mfs, + self.syscall_log, + os.path.join( + str(get_parent_path(self.lpath_mfs)), "_".join(x for x in str(get_basename(self.lpath_mfs)).split("_")[1:]), + ), + ] + logging.debug("BACKUP FILES: {}".format(files)) + archive = os.path.join(self.new_crash_dir, "sample.zip") + with zipfile.ZipFile(archive, "w", compression=zipfile.ZIP_DEFLATED) as myzip: + for f in list(filter(None, files)): + myzip.write(f, pathlib.Path(f).name) + myzip.close() + + def _iter_reset(self): + if self.iter % 150 == 0 and self.iter - self.last_crash_iter > 50: + logging.warning("Automatic VM reset in progress...") + cur_snap = self.vm_object.get_current_snapshot() + try: + self.vm_object.restore_snapshot(cur_snap) + self.vm_object.new_rshell() + except socket.timeout as e: + logging.debug("Socket timed out during snapshot restoring: {}".format(e)) + time.sleep(2) + if self.vm_object.check_vm_state(): + self.vm_object.new_rshell() + else: + self.vm_object.crash_handler() + + @staticmethod + def _get_percentage(part, whole): + try: + return round(100 * float(part) / float(whole), 2) + except ZeroDivisionError: + return 0 + + @staticmethod + def _remove_iteration_leftovers_on_target(fs_maker_vm, fs_name): + fs_maker_vm.exec_cmd_quiet("/bin/rm -rf {}".format(os.path.join("/tmp/", fs_name))) + fs_maker_vm.exec_cmd_quiet("/bin/rm -rf {}".format(os.path.join("/mnt", fs_name))) + + def copy_generated_file_system_to_host(self, fs_maker_vm, fs_name): + fs_maker_vm.cp_to_host( + save_files_at=os.path.join(os.getcwd() + "/file_system_storage"), + get_files_from="/tmp/", + list_of_files_to_copy=fs_name, + ) + self._remove_iteration_leftovers_on_target(fs_maker_vm, "fs_" + fs_name) + + def fuzz(self, fuzzy_vm, fs_maker_vm): + create_directory(os.getcwd() + "/file_system_storage") + while True: + if self.dyn_scaling: + self._change_fs_parameters() + try: + self.start_iter = time.time() + self.runtime = str(datetime.datetime.now() - self.start)[:-4] + self._iter_reset() + fs_name = "{}_{}_{}MB".format(self.name, self.mfs_type, self.mfs_size) + cmd = ( + "python3 /tmp/makeFS2.py -fs {} -m 1" + ' -n "{}"' + " -s {}" + " -p {}" + " -ps {}" + " -o {}".format(self.mfs_type, fs_name, self.mfs_size, self.mfs_files, self.mfs_max_file_size, "/tmp/",) + ) + if fs_maker_vm.silent_vm_state(): + self.fs_log = fs_maker_vm.exec_cmd_quiet(cmd) + if "ERROR" in self.fs_log: + print("Failed FS creation: {}".format(self.fs_log)) + sys.exit(1) + else: + fs_maker_vm.restore_snapshot(fs_maker_vm.get_current_snapshot()) + fs_maker_vm.quick_boot(vm_name=fs_maker_vm.name) + self.fs_log = fs_maker_vm.exec_cmd_quiet(cmd) + if not self.fs_log: + logging.error("Failed to fetch fs sample log.. Exiting..!\n") + sys.exit(1) + self.copy_generated_file_system_to_host(fs_maker_vm, fs_name) + self._make_mutation(fs_name) + if not self.lpath_mfs: + continue + fuzzy_vm.cp_to_guest( + get_files_from="file_system_storage/", + list_of_files_to_copy=get_basename(self.lpath_mfs), + save_files_at="/tmp", + ) + if "zfs" in self.mfs_type: + mnt_path = "pool_" + "_".join(x for x in get_basename(self.lpath_mfs).split("_")[1:]) + else: + mnt_path = get_basename(self.lpath_mfs) + self.automate( + rpath_mfs="/tmp/{}".format(get_basename(self.lpath_mfs)), mount_at="/mnt/{}".format(mnt_path), + ) + self.vm_object.exec_cmd_quiet("rm -rf {}".format(os.path.join("/tmp", self.lpath_mfs))) + except (paramiko.ssh_exception.SSHException, paramiko.ssh_exception.NoValidConnectionsError, socket.timeout,) as e: + logging.error("SSH/socket exception: {}. Resetting VM".format(e)) + self.check_if_crash_sample() + except (ValueError, OSError) as e: + logging.error("Ran into a problem during fuzzing: {}".format(e)) + except (EOFError, AttributeError) as e: + logging.error(e) + logging.error("VM may be down..? Resetting") + self.vm_object.restore_snapshot(snap_name=self.vm_object.get_current_snapshot()) + self.vm_object.reset_vm() + + def _make_mutation(self, fs_name): + try: + fs = os.path.join(os.getcwd() + "/file_system_storage/", fs_name) + if self.mutation_engine == "radamsa": + self.mutation_radamsa(fs) + elif self.mutation_engine == "byte_flip_seq": + self.mutation_byte_flip_seq(fs, self.mutation_size) + elif self.mutation_engine == "byte_flip_rnd": + self.mutation_byte_flip_rnd(fs, self.mutation_size) + elif self.mutation_engine == "metadata": + self.mutation_metadata(fs, self.mutation_size) + else: + logging.error("Unknown mutation engine specified! Exiting...") + sys.exit(1) + except (AttributeError, IndexError): + logging.error("Ran into a problem during mutation. Exiting..!") + sys.exit(1) + + def _change_fs_parameters(self): + if self.mfs_size >= 750: + if self.mfs_type == "zfs": + self.mfs_size = 65 + self.mfs_files = 20 + self.mfs_max_file_size = 2048 + else: + self.mfs_size = 15 + self.mfs_files = 10 + self.mfs_max_file_size = 1024 + return 0 + if (int(self.iter) - int(self.last_unique)) >= 15000: + self.last_unique += 15000 # workaround so the new fs size is fuzzing for another 15k iters + self.mfs_size += 50 + if random.randint(0, 1) == 0: + self.mfs_files = int(((self.mfs_size << 10) - 3000) / self.mfs_max_file_size) + else: + self.mfs_max_file_size = int(((self.mfs_size << 10) - 3000) / self.mfs_files) + + +def to_dict(input_ordered_dict): + return json.loads(json.dumps(input_ordered_dict)) + + +def copy_scripts_to_fuzzer(fuzzy_vm): + if not int(fuzzy_vm.exec_cmd_quiet("[ -f /tmp/get_users_and_groups.py ] && echo 1 || echo 0 | /usr/bin/head -n1")): + fuzzy_vm.cp_to_guest( + get_files_from="utility/", list_of_files_to_copy="get_users_and_groups.py", save_files_at="/tmp", + ) + if not int(fuzzy_vm.exec_cmd_quiet("[ -f /tmp/file_traversal.py ] && echo 1 || echo 0 | /usr/bin/head -n1")): + fuzzy_vm.cp_to_guest( + get_files_from="utility/", list_of_files_to_copy="file_traversal.py", save_files_at="/tmp", + ) + + +def main(): + fs_generator = VmManager() + fs_generator.setup(vm_user=fuzzing_config.user, vm_password=fuzzing_config.pw, name=sys.argv[2]) + fs_generator.quick_boot(vm_name=sys.argv[2]) + if not int(fs_generator.exec_cmd_quiet("[ -f /tmp/makeFS2.py ] && echo 1 || echo 0 | head -n1")): + fs_generator.cp_to_guest(get_files_from=".", list_of_files_to_copy="makeFS2.py", save_files_at="/tmp/") + fuzzer = Fuzzer() + fuzzer.__setup__( + name=sys.argv[1], + vm_name=sys.argv[3], + mutation_engine=tuple(x for x in sys.argv[4].split(", ")), + mfs_type=sys.argv[5], + mfs_size=int(sys.argv[6]), + mfs_files=int(sys.argv[7]), + mfs_max_file_size=int(sys.argv[8]), + dyn_scaling=sys.argv[9], + ) + fuzz_vm = VmManager() + fuzz_vm.setup(vm_user=fuzzing_config.user, vm_password=fuzzing_config.pw, name=fuzzer.name) + fuzz_vm.quick_boot(vm_name=fuzzer.vm_name) + fuzzer.vm_object = fuzz_vm + fuzzer.fuzz(fuzz_vm, fs_generator) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/src/Fuzzer/__init__.py b/src/Fuzzer/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/Fuzzer/byte_flipper.py b/src/Fuzzer/byte_flipper.py new file mode 100644 index 0000000..5d3b0a8 --- /dev/null +++ b/src/Fuzzer/byte_flipper.py @@ -0,0 +1,44 @@ +import logging +import random +import struct + +from file_system_magic.fs_util import get_bytearray, write_to_file, get_mutated_bytes + + +class ByteFlipper: + def __init__(self, fs, nbytes, mode=None): + self.nbytes = nbytes + self.fs = fs + self.mfs = None + self.mime = None + self.mode = mode + self.rnd = random.Random() + self.rnd.seed(random.getrandbits(1024)) + + def mutation_seq(self): + byte_array = get_bytearray(self.fs) + try: + rnd_pos = random.randint(0, len(byte_array) - self.nbytes) + muta_byte_seq = get_mutated_bytes(self.nbytes) + ctr = 0 + while ctr <= self.nbytes: + byte_array[rnd_pos + ctr] = struct.pack("B", muta_byte_seq[ctr]) + ctr += 1 + except IndexError as e: + logging.error(e) + return None + return write_to_file(self.fs, self.nbytes, self.mode, byte_array) + + def mutation_rnd(self): + ctr = 0 + byte_array = get_bytearray(self.fs) + while ctr < self.nbytes: + try: + rnd_pos = random.randint(0, len(byte_array)) + muta_byte_seq = get_mutated_bytes(self.nbytes) + byte_array[rnd_pos] = muta_byte_seq + ctr += 1 + except IndexError as e: + logging.error(e) + return None + return write_to_file(self.fs, self.nbytes, self.mode, byte_array) diff --git a/src/Fuzzer/file_system_magic/__init__.py b/src/Fuzzer/file_system_magic/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/Fuzzer/file_system_magic/ext_superblock_parser.py b/src/Fuzzer/file_system_magic/ext_superblock_parser.py new file mode 100644 index 0000000..656c407 --- /dev/null +++ b/src/Fuzzer/file_system_magic/ext_superblock_parser.py @@ -0,0 +1,237 @@ +#!/usr/bin/env python3 + +import argparse +import os +import pathlib +import pprint as pp +import re +import sys +from collections import OrderedDict +from ctypes import Structure, sizeof, c_uint8, c_char, c_uint32, c_uint64, c_uint16 +from .fs_util import get_int + +# xxd EXT_FS | 'ef53' +# at offset 1080 +EXT_MAGIC = b"\x53\xef" + +SBLOCK_EXT2 = 1024 # First 1024 bytes are unused, block group 0 starts with a superblock @ offset 1024d +MAGIC_BYTES_OFF = 56 + +EXT_SB = [ + ("e2fs_icount", c_uint32), + ("e2fs_bcount", c_uint32), + ("e2fs_rbcount", c_uint32), + ("e2fs_fbcount", c_uint32), + ("e2fs_ficount", c_uint32), + ("e2fs_first_dblock", c_uint32), + ("e2fs_log_bsize", c_uint32), + ("e2fs_log_fsize", c_uint32), + ("e2fs_bpg", c_uint32), + ("e2fs_fpg", c_uint32), + ("e2fs_ipg", c_uint32), + ("e2fs_mtime", c_uint32), + ("e2fs_wtime", c_uint32), + ("e2fs_mnt_count", c_uint16), + ("e2fs_max_mnt_count", c_uint16), + ("e2fs_magic", c_uint16), + ("e2fs_state", c_uint16), + ("e2fs_beh", c_uint16), + ("e2fs_minrev", c_uint16), + ("e2fs_lastfsck", c_uint32), + ("e2fs_fsckintv", c_uint32), + ("e2fs_creator", c_uint32), + ("e2fs_rev", c_uint32), + ("e2fs_ruid", c_uint16), + ("e2fs_rgid", c_uint16), + ("e2fs_first_ino", c_uint32), + ("e2fs_inode_size", c_uint16), + ("e2fs_block_group_nr", c_uint16), + ("e2fs_features_compat", c_uint32), + ("e2fs_features_incompat", c_uint32), + ("e2fs_features_rocompat", c_uint32), + ("e2fs_uuid", c_uint8 * 16), # arr[16], at offset 104 + ("e2fs_vname", c_char * 16), # arr[16] + ("e2fs_fsmnt", c_char * 64), # arr[64] + ("e2fs_algo", c_uint32), + ("e2fs_prealloc", c_uint8), + ("e2fs_dir_prealloc", c_uint8), + ("e2fs_reserved_ngdb", c_uint16), + ("e3fs_journal_uuid", c_char * 16), # arr[16] + ("e3fs_journal_inum", c_uint32), + ("e3fs_journal_dev", c_uint32), + ("e3fs_last_orphan", c_uint32), + ("e3fs_hash_seed", c_uint32 * 4), # arr[4] + ("e3fs_def_hash_version", c_char), + ("e3fs_jnl_backup_type", c_char), + ("e3fs_desc_size", c_uint16), + ("e3fs_default_mount_opts", c_uint32), + ("e3fs_first_meta_bg", c_uint32), + ("e3fs_mkfs_time", c_uint32), + ("e3fs_jnl_blks", c_uint32), + ("e4fs_bcount_hi", c_uint32), + ("e4fs_rbcount_hi", c_uint32), + ("e4fs_fbcount_hi", c_uint32), + ("e4fs_min_extra_isize", c_uint16), + ("e4fs_want_extra_isize", c_uint16), + ("e4fs_flags", c_uint32), + ("e4fs_raid_stride", c_uint16), + ("e4fs_mmpintv", c_uint16), + ("e4fs_mmpblk", c_uint64), + ("e4fs_raid_stripe_wid", c_uint32), + ("e4fs_log_gpf", c_uint8), + ("e4fs_chksum_type", c_uint8), + ("e4fs_encrypt", c_uint8), + ("e4fs_reserved_pad", c_uint8), + ("e4fs_kbytes_written", c_uint64), + ("e4fs_snapinum", c_uint32), + ("e4fs_snapid", c_uint32), + ("e4fs_snaprbcount", c_uint64), + ("e4fs_snaplist", c_uint32), + ("e4fs_errcount", c_uint32), + ("e4fs_first_errtime", c_uint32), + ("e4fs_first_errino", c_uint32), + ("e4fs_first_errblk", c_uint64), + ("e4fs_first_errfunc", c_uint8 * 32), # arr[32] + ("e4fs_first_errline", c_uint32), + ("e4fs_last_errtime", c_uint32), + ("e4fs_last_errino", c_uint32), + ("e4fs_last_errline", c_uint32), + ("e4fs_last_errblk", c_uint64), + ("e4fs_last_errfunc", c_uint8 * 32), # arr[32] + ("e4fs_mount_opts", c_uint8 * 64), # arr[64] + ("e4fs_usrquota_inum", c_uint32), + ("e4fs_grpquota_inum", c_uint32), + ("e4fs_overhead_clusters", c_uint32), + ("e4fs_backup_bgs", c_uint32 * 2), # arr[2] + ("e4fs_encrypt_algos", c_uint8 * 4), # arr[4] + ("e4fs_encrypt_pw_salt", c_uint8 * 16), # arr[16] + ("e4fs_lpf_ino", c_uint32), + ("e4fs_proj_quota_inum", c_uint32), + ("e4fs_chksum_seed", c_uint32), + ("e4fs_reserved", c_uint32 * 98), # arr[98] + ("e4fs_sbchksum", c_uint32), +] + + +class EXT(Structure): + def __init__(self, fs, fst): + super(Structure).__init__() + self.sb = OrderedDict() + self.sb_expected_len = 960 + self.fs = fs + self.fst = fst + self.sb_locs = [] + self.sb_locs = [] + self.fields_sb = EXT_SB + + def _sanity_check(self): + res_sb = 0 + for _, v in self.fields_sb: + res_sb += sizeof(v) + assert res_sb == self.sb_expected_len + + @staticmethod + def get_offset_in_sb(fn): + off = 0 + sb = EXT_SB + for i, v in sb: + if i == fn: + return off, sizeof(v) + off += sizeof(v) + return None, None + + def read_superblock_in_dict(self, loc=SBLOCK_EXT2): + with open(self.fs, "rb") as f: + f.seek(loc) + for field in self.fields_sb: + self.sb[field[0]] = f.read(sizeof(field[1])) + + def find_all_superblocks(self): + self.read_superblock_in_dict() + with open(self.fs, "rb") as f: + f.seek(0) + data = f.read() + # Using uuid because the EXT2 magic is too short to yield good results + matches = re.finditer(self.sb["e2fs_uuid"], data) + for m in matches: + bytearr = bytearray() + sb = m.span()[0] - 104 + bytearr.append(data[sb + MAGIC_BYTES_OFF]) + bytearr.append(data[sb + MAGIC_BYTES_OFF + 1]) + if bytearr == EXT_MAGIC: + self.sb_locs.append(sb) + return self.sb_locs + + def find_all_cylinder_groups(self): + self.cg_locs = [] + + def print_superblock(self): + tmp = OrderedDict() + for key, value in self.sb.items(): + if key in ["e3fs_def_hash_version", "e3fs_jnl_backup_type", "e3fs_journal_uuid", "e2fs_fsmnt", "e2fs_vname"]: + tmp[key] = hex(get_int(value, signed=False)) + else: + tmp[key] = hex(get_int(value, signed=False)) + pp.pprint(tmp) + + def dump_superblock(self, n=SBLOCK_EXT2): + self.read_superblock_in_dict(loc=n) + p = str(pathlib.Path(self.fs).parent) + c = str(pathlib.Path(self.fs).name) + fp = os.path.join(p, f"superblock_{hex(n)}_" + c + ".dump") + with open(fp, "wb") as f: + for _, value in self.sb.items(): + f.write(value) + print(f"[+] Dumped {fp}") + + def dump_all_superblocks(self): + self.find_all_superblocks() + for i in self.sb_locs: + self.dump_superblock(n=i) + + +def main(): + parser = argparse.ArgumentParser(description="EXT file system parser") + parser.add_argument( + "--dump", "-d", action="store_true", default=False, dest="dump", help="Dumps the first superblock to disk" + ) + parser.add_argument( + "--dump_all", "-da", action="store_true", default=False, dest="dump_all", help="Dumps all superblocks to disk" + ) + parser.add_argument( + "--print_superblock", + "-ps", + type=int, + default=-1, + dest="print_sb", + help="Print the n-th superblock to stdout. Default: %(default)s", + ) + parser.add_argument( + "--find_all", + "-fa", + action="store_true", + default=False, + dest="find_all", + help="Finds all superblock locations and prints them to stdout", + ) + parser.add_argument("--file_system", "-f", required=True, type=pathlib.Path, help="UFS Filesystem") + + args = parser.parse_args() + + ext = EXT(args.file_system, "ext") + if args.dump: + ext.dump_superblock() + if args.dump_all: + ext.dump_all_superblocks() + if args.find_all: + ext.find_all_superblocks() + res = ", ".join(hex(e) for e in ext.sb_locs) + print(f"[+] Found superblock offsets: {res}") + if args.print_sb >= 0: + ext.find_all_superblocks() + ext.read_superblock_in_dict(ext.sb_locs[args.print_sb]) + ext.print_superblock() + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/src/Fuzzer/file_system_magic/fs_util.py b/src/Fuzzer/file_system_magic/fs_util.py new file mode 100644 index 0000000..0813764 --- /dev/null +++ b/src/Fuzzer/file_system_magic/fs_util.py @@ -0,0 +1,87 @@ +import os +import re +import magic +import pathlib +from ctypes import sizeof +from datetime import datetime +from secrets import token_bytes + + +def get_int(n, signed=False): + return int.from_bytes(n, byteorder="little", signed=signed) + + +def get_time(n): + return datetime.fromtimestamp(n).strftime("%c") + + +def get_hstr(hex_str, inv=False): + if len(hex_str[2:]) % 16 != 0: + hex_str = "0" + hex_str[2:] + else: + hex_str = hex_str[2:] + if inv: + return bytes.fromhex(hex_str[::-1]).decode("ASCII") + else: + return bytes.fromhex(hex_str).decode("ASCII") + + +def make_zero(size): + return b"\x00" * size + + +def make_ff(size): + return b"\xFF" * size + + +def make_rnd(size): + return token_bytes(size) + + +def get_bytearray(fs): + with open(fs, "rb") as f: + byte_array = re.findall(b".", f.read()) + return byte_array + + +def set_mime(fs): + file_mime = magic.from_file(fs) + if "Unix Fast" in file_mime and "[v1]" in file_mime: + return "ufs1" + elif "Unix Fast" in file_mime and "[v2]" in file_mime: + return "ufs2" + elif re.findall(r"ext[2-4]", file_mime): + return "ext" + elif "data" in file_mime: + return "zfs" + + +def write_to_file(fs, nbytes, mode, byte_array): + name = pathlib.Path(fs).name + _path = pathlib.Path(fs).parent + mfs = os.path.join(_path, "{}b_{}_".format(nbytes, mode) + name) + with open(mfs, "wb") as g: + g.write(b"".join(x for x in byte_array)) + return mfs + + +def get_mutated_bytes(nbytes, mode=None): + if mode == "ff": + return make_ff(nbytes) + elif mode == "00": + return make_zero(nbytes) + else: + return make_rnd(nbytes) + + +def get_offset_in_sb(fsp, fn): + off = 0 + for i, v in fsp.fields_sb: + if i == fn: + return off, sizeof(v) + off += sizeof(v) + return None, None + + +if __name__ == "__main__": + pass diff --git a/src/Fuzzer/file_system_magic/ufs_superblock_parser.py b/src/Fuzzer/file_system_magic/ufs_superblock_parser.py new file mode 100644 index 0000000..af6e95b --- /dev/null +++ b/src/Fuzzer/file_system_magic/ufs_superblock_parser.py @@ -0,0 +1,379 @@ +#!/usr/bin/env python3 + +import argparse +import os +import pathlib +import pprint as pp +import re +from collections import OrderedDict +from ctypes import Structure, sizeof, c_int32, c_int64, c_uint8, c_char, c_int8, c_uint32, c_int16, c_void_p, c_uint64, c_size_t +from .fs_util import get_int + +# xxd UFS_FS | grep '1901 5419' +# multiple offsets +UFS_MAGIC = b"\x19\x01\x54\x19" +CG_MAGIC = b"\x55\x02\x09" +SBLOCK_PIGGY = 262144 +SBLOCKSIZE = 8192 +MAXMNTLEN = 468 +MAXVOLLEN = 32 +FSMAXSNAP = 20 +NOCSPTRS = int(128 / (sizeof(c_void_p)) - 4) +MAXFRAG = 8 +SBLOCK_UFS1 = 8192 +SBLOCK_UFS2 = 65536 + +ufs_time_t = c_int64 +ufs2_daddr_t = c_int64 + +UFS_SB = [ + ("fs_firstfield", c_int32), + ("fs_unused_1", c_int32), + ("fs_sblkno", c_int32), + ("fs_cblkno", c_int32), + ("fs_iblkno", c_int32), + ("fs_dblkno", c_int32), + ("fs_old_cgoffset", c_int32), + ("fs_old_cgmask", c_int32), + ("fs_old_time", c_int32), + ("fs_old_size", c_int32), + ("fs_old_dsize", c_int32), + ("fs_ncg", c_uint32), + ("fs_bsize", c_int32), + ("fs_fsize", c_int32), + ("fs_frag", c_int32), + ("fs_minfree", c_int32), + ("fs_old_rotdelay", c_int32), + ("fs_old_rps", c_int32), + ("fs_bmask", c_int32), + ("fs_fmask", c_int32), + ("fs_bshift", c_int32), + ("fs_fshift", c_int32), + ("fs_maxcontig", c_int32), + ("fs_maxbpg", c_int32), + ("fs_fragshift", c_int32), + ("fs_fsbtodb", c_int32), + ("fs_sbsize", c_int32), + ("fs_spare1", c_int32 * 2), # arr[2] + ("fs_nindir", c_int32), + ("fs_inopb", c_uint32), + ("fs_old_nspf", c_int32), + ("fs_optim", c_int32), + ("fs_old_npsect", c_int32), + ("fs_old_interleave", c_int32), + ("fs_old_trackskew", c_int32), + ("fs_id", c_int32 * 2), # arr[2] + ("fs_old_csaddr", c_int32), + ("fs_cssize", c_int32), + ("fs_cgsize", c_int32), + ("fs_spare2", c_int32), + ("fs_old_nsect", c_int32), + ("fs_old_spc", c_int32), + ("fs_old_ncyl", c_int32), + ("fs_old_cpg", c_int32), + ("fs_ipg", c_uint32), + ("fs_fpg", c_int32), + ("fs_old_cstotal__cs_ndir", c_int32), + ("fs_old_cstotal__cs_nbfree", c_int32), + ("fs_old_cstotal__cs_nifree", c_int32), + ("fs_old_cstotal__cs_nffree", c_int32), + # ('fs_old_cstotal', c_int32 * 4), # struct csum + ("fs_fmod", c_int8), + ("fs_clean", c_int8), + ("fs_ronly", c_int8), + ("fs_old_flags", c_int8), + ("fs_fsmnt", c_char * MAXMNTLEN), + ("fs_volname", c_char * MAXVOLLEN), + ("fs_swuid", c_uint64), + ("fs_pad", c_int32), + ("fs_cgrotor", c_int32), + ("*fs_ocsp", c_void_p * NOCSPTRS), # void *fs_ocsp[NOCSPTRS] + ("*fs_contigdirs", c_size_t), # *fs_contigdirs + ("*fs_csp", c_size_t), # struct csum *fs_csp + ("*fs_maxcluster", c_size_t), + ("*fs_active", c_uint64), + ("fs_old_cpc", c_int32), + ("fs_maxbsize", c_int32), + ("fs_unrefs", c_int64), + ("fs_providersize", c_int64), + ("fs_metaspace", c_int64), + ("fs_sparecon64", c_int64 * 13), # arr[13] + ("fs_sblockactualloc", c_int64), + ("fs_sblockloc", c_int64), + ("fs_cstotal__cs_ndir", c_int64), + ("fs_cstotal__cs_nbfree", c_int64), + ("fs_cstotal__cs_nifree", c_int64), + ("fs_cstotal__cs_nffree", c_int64), + ("fs_cstotal__cs_numclusters", c_int64), + ("fs_cstotal__cs_spare", c_int64 * 3), + # ('fs_cstotal', c_size_t * 8), # struct csum_total + ("fs_time", ufs_time_t), + ("fs_size", c_int64), + ("fs_dsize", c_int64), + ("fs_csaddr", ufs2_daddr_t), + ("fs_pendingblocks", c_int64), + ("fs_pendinginodes", c_uint32), + ("fs_snapinum", c_uint32 * FSMAXSNAP), + ("fs_avgfilesize", c_uint32), + ("fs_avgfpdir", c_uint32), + ("fs_save_cgsize", c_int32), + ("fs_mtime", ufs_time_t), + ("fs_sujfree", c_int32), + ("fs_sparecon32", c_int32 * 21), # arr[21] + ("fs_ckhash", c_uint32), + ("fs_metackhash", c_uint32), + ("fs_flags", c_int32), + ("fs_contigsumsize", c_int32), + ("fs_maxsymlinklen", c_int32), + ("fs_old_inodefmt", c_int32), + ("fs_maxfilesize", c_uint64), + ("fs_qbmask", c_int64), + ("fs_qfmask", c_int64), + ("fs_state", c_int32), + ("fs_old_postblformat", c_int32), + ("fs_old_nrpos", c_int32), + ("fs_spare5", c_int32 * 2), # arr[2] + ("fs_magic", c_int32), +] + +UFS_CG = [ + ("cg_firstfield", c_int32), + ("cg_magic", c_int32), + ("cg_old_time", c_int32), + ("cg_cgx", c_uint32), + ("cg_old_nyl", c_int16), + ("cg_old_niblk", c_int16), + ("cg_ndblk", c_uint32), + ("cg_cs__cs_ndir", c_int32), + ("cg_cs__cs_nbfree", c_int32), + ("cg_cs__cs_nifree", c_int32), + ("cg_cs__cs_nffree", c_int32), + ("cg_rotor", c_uint32), + ("cg_frotor", c_uint32), + ("cg_irotor", c_uint32), + ("cg_frsum", c_uint32 * MAXFRAG), # arr[MAXFRAG] + ("cg_old_btotoff", c_int32), + ("cg_old_boff", c_int32), + ("cg_iusedoff", c_uint32), + ("cg_freeoff", c_uint32), + ("cg_nextfreeoff", c_uint32), + ("cg_clustersumoff", c_uint32), + ("cg_clusteroff", c_uint32), + ("cg_nclusterblks", c_uint32), + ("cg_niblk", c_uint32), + ("cg_initediblk", c_uint32), + ("cg_unrefs", c_uint32), + ("cg_sparecon32", c_int32), + ("cg_ckhash", c_uint32), + ("cg_time", ufs_time_t), + ("cg_sparecon64", c_uint64 * 3), # arr[3] + ("cg_space", c_uint8), +] + + +class UFS(Structure): + def __init__(self, fs, fst): + super(Structure).__init__() + self.sb = OrderedDict() + self.cg = OrderedDict() + self.sb_expected_len = 1376 + self.cg_expected_len = 169 + self.fs = fs + self.fst = fst + if fst == "ufs2": + self.sbo = SBLOCK_UFS2 + else: + self.sbo = SBLOCK_UFS1 + self.sb_locs = [] + self.fields_sb = UFS_SB + self.cg_locs = [] + self.fields_cg = UFS_CG + self._sanity_check() + + def _sanity_check(self): + res_sb = 0 + res_cg = 0 + for _, v in self.fields_sb: + res_sb += sizeof(v) + for _, v in self.fields_cg: + res_cg += sizeof(v) + assert res_sb == self.sb_expected_len + assert res_cg == self.cg_expected_len + + def get_superblock(self, n=0): + self.find_all_superblocks() + self._read_superblock_in_dict(self.sb_locs[n]) + return self.sb + + def get_cylinder_group(self, n=0): + self.find_all_cylinder_groups() + self._read_cylinder_group_in_dict(self.cg_locs[n]) + return self.cg + + def _read_superblock_in_dict(self, loc=SBLOCK_UFS2): + + with open(self.fs, "rb") as f: + f.seek(loc) + for field in self.fields_sb: + self.sb[field[0]] = f.read(sizeof(field[1])) + + def _read_cylinder_group_in_dict(self, loc=None): + with open(self.fs, "rb") as f: + f.seek(loc) + for field in self.fields_cg: + self.cg[field[0]] = f.read(sizeof(field[1])) + + def find_all_superblocks(self): + with open(self.fs, "rb") as f: + data = f.read() + matches = re.finditer(UFS_MAGIC, data) + for m in matches: + sb = m.span()[0] - (self.sb_expected_len - 4) + self.sb_locs.append(sb) + self.sb_locs = self.sb_locs[1:] + if (not self.sb_locs or SBLOCK_UFS2 not in self.sb_locs) and self.fst == "ufs2": + self.sb_locs = [SBLOCK_UFS2] + self.sb_locs + elif (not self.sb_locs or SBLOCK_UFS1 not in self.sb_locs) and self.fst == "ufs1": + self.sb_locs = [SBLOCK_UFS1] + self.sb_locs + return self.sb_locs + + def find_all_cylinder_groups(self): + with open(self.fs, "rb") as f: + data = f.read() + matches = re.finditer(CG_MAGIC, data) + for m in matches: + cg = m.span()[0] - 4 + self.cg_locs.append(cg) + return self.cg_locs + + def print_superblock(self): + tmp = OrderedDict() + for key, value in self.sb.items(): + if key in [ + "fs_maxfilesize", + "fs_metackhash", + "fs_ckhash", + "fs_avgfpdir", + "fs_avgfilesize", + "fs_snapinum", + "fs_pendinginodes", + "*fs_active", + "fs_swuid", + "fs_ipg", + "fs_inopb", + "fs_ncg", + ]: + tmp[key] = hex(get_int(value, signed=False)) + else: + tmp[key] = hex(get_int(value)) + pp.pprint(tmp) + + def print_cylinder_group(self): + tmp = OrderedDict() + for key, value in self.cg.items(): + if key in [ + "cg_firstfield", + "cg_magic", + "cg_old_time", + "cg_old_ncyl", + "cg_old_niblk", + "cg_old_btotoff", + "cg_old_boff", + "cg_sparecon32", + "cg_time", + "cg_sparecon64", + "cg_cs__cs_ndir", + "cg_cs__cs_nbfree", + "cg_cs__cs_nifree", + "cg_cs__cs_nffree", + ]: + tmp[key] = hex(get_int(value, signed=True)) + else: + tmp[key] = hex(get_int(value)) + pp.pprint(tmp) + + def dump_superblock(self, n=0): + if not self.sb_locs: + self.find_all_superblocks() + self._read_superblock_in_dict(loc=self.sb_locs[n]) + p = str(pathlib.Path(self.fs).parent) + c = str(pathlib.Path(self.fs).name) + fp = os.path.join(p, f"superblock_{hex(n)}_" + c + ".dump") + with open(fp, "wb") as f: + for _, value in self.sb.items(): + f.write(value) + print(f"[+] Dumped {fp}") + + def dump_all_superblocks(self): + self.find_all_superblocks() + for i, _ in enumerate(self.sb_locs): + self.dump_superblock(n=i) + + +def main(): + parser = argparse.ArgumentParser(description="UFS file system parser") + parser.add_argument( + "--dump", "-d", action="store_true", default=False, dest="dump", help="Dumps the first superblock to disk" + ) + parser.add_argument( + "--dump_all", "-da", action="store_true", default=False, dest="dump_all", help="Dumps all superblocks to disk" + ) + parser.add_argument( + "--print_superblock", + "-ps", + type=int, + default=-1, + dest="print_sb", + help="Print the n-th superblock to stdout. Default: %(default)s", + ) + parser.add_argument( + "--print_cylinder_groups", + "-pcg", + type=int, + help="Print the n-th cylinder group to stdout. Default: %(default)s", + default=-1, + dest="print_cg", + ) + parser.add_argument( + "--find_all", + "-fa", + action="store_true", + default=False, + dest="find_all", + help="Finds all superblock locations and prints them to stdout. Default: %(default)s", + ) + parser.add_argument("--file_system", "-f", required=True, type=pathlib.Path, help="UFS Filesystem") + parser.add_argument( + "--file_system_type", "-ft", type=str, default="ufs2", dest="fst", help="[ufs1, ufs2]. Default: %(default)s" + ) + + args = parser.parse_args() + + ufs = UFS(args.file_system, args.fst) + if args.dump: + ufs.dump_superblock() + if args.dump_all: + ufs.dump_all_superblocks() + if args.find_all: + ufs.find_all_superblocks() + ufs.find_all_cylinder_groups() + res = ", ".join(hex(e) for e in ufs.sb_locs) + print(f"[+] Found superblock offsets: {res}") + res = ", ".join(hex(e) for e in ufs.cg_locs) + print(f"[+] Found cylinder group offsets: {res}") + if args.print_sb >= 0: + ufs.find_all_superblocks() + if not ufs.sb_locs and args.fst == "ufs2": + ufs.sb_locs.append(SBLOCK_UFS2) + elif not ufs.sb_locs and args.fst == "ufs1": + ufs.sb_locs.append(SBLOCK_UFS1) + ufs._read_superblock_in_dict(ufs.sb_locs[args.print_sb]) + ufs.print_superblock() + if args.print_cg >= 0: + ufs.find_all_cylinder_groups() + ufs._read_cylinder_group_in_dict(ufs.cg_locs[args.print_cg]) + ufs.print_cylinder_group() + + +if __name__ == "__main__": + main() diff --git a/src/Fuzzer/file_system_magic/zfs_uberblock_parser.py b/src/Fuzzer/file_system_magic/zfs_uberblock_parser.py new file mode 100644 index 0000000..54db621 --- /dev/null +++ b/src/Fuzzer/file_system_magic/zfs_uberblock_parser.py @@ -0,0 +1,138 @@ +#!/usr/bin/env python3 + +import argparse +import os +import pathlib +import re +from collections import OrderedDict +from ctypes import Structure, sizeof, c_uint64, c_uint8, c_uint16 + +# xxd ZFS_FS | grep '0cb1 ba00' +# multiple offsets +ZFS_MAGIC = b"\x0c\xb1\xba\x00\x00\x00\x00\x00" +# xxd test_zfs | grep '117a 0cb1 7ada 1002' +ZBT_MAGIC = b"\x11\x7a\x0c\xb1\x7a\xda\x10\x02" +# xxf test_zfs | grep '11ea 1ca1 0000 0000' +MMP_MAGIC = b"\x11\xea\x1c\xa1\x00\x00\x00\x00" + +# TODO: Finish ZFS implementation https://github.com/freebsd/freebsd/blob/master/sys/cddl/boot/zfs/zfsimpl.h +ZFS_UB = [ + ("ub_magic", c_uint64), + ("ub_version", c_uint64), + ("ub_txg", c_uint64), + ("ub_guid_sum", c_uint64), + ("ub_timestamp", c_uint64), + # ("blk_dva0", c_uint64), + # ("blk_dva1", c_uint64), + # ("blk_prop", c_uint64), + # ("blk_pad0", c_uint64), + # ("blk_pad1", c_uint64), + # ("blk_phys_birth", c_uint64), + # ("blk_birth", c_uint64), + # ("blk_fill", c_uint64), + # ("blk_cksum0", c_uint64), + # ("blk_cksum1", c_uint64), + # ("blk_cksum2", c_uint64), + # ("blk_cksum3", c_uint64), + ("TODO_resolve_data_fields", c_uint64 * 117), + ("ub_software_version", c_uint64), + ("ub_mmp_magic", c_uint64), + ("ub_mmp_delay", c_uint64), + ("ub_mmp_config", c_uint64), + ("ub_mmp_config_VALID", c_uint8), + ("ub_mmp_config_write_interval", c_uint8 * 3), + ("ub_mmp_config_seq", c_uint16), + ("ub_mmp_config_fail_intervals", c_uint16), + ("ub_checkpoint_txg", c_uint64), +] + + +class ZFS(Structure): + def __init__(self, fs, fst): + super(Structure).__init__() + self.sb = OrderedDict() + self.sb_expected_len = 1024 + self.fs = fs + self.fst = fst + self.sb_locs = [] + self.fields_sb = ZFS_UB + + def _sanity_check(self): + res_ub = 0 + for _, v in self.fields_sb: + res_ub += sizeof(v) + assert res_ub == self.sb_expected_len + + def get_superblock(self, n=0): + self.find_all_superblocks() + self._read_superblock_in_dict(self.sb_locs[n]) + return self.sb + + def _read_superblock_in_dict(self, loc=None): + with open(self.fs, "rb") as f: + f.seek(loc) + for field in self.fields_sb: + self.sb[field[0]] = f.read(sizeof(field[1])) + + def find_all_superblocks(self): + with open(self.fs, "rb") as f: + data = f.read() + matches = re.finditer(ZFS_MAGIC, data) + for m in matches: + self.sb_locs.append(m.span()[0]) + return self.sb_locs + + def dump_superblock(self, n=0): + if not self.sb_locs: + self.find_all_superblocks() + self._read_superblock_in_dict(loc=self.sb_locs[n]) + p = str(pathlib.Path(self.fs).parent) + c = str(pathlib.Path(self.fs).name) + fp = os.path.join(p, f"superblock_{hex(n)}_" + c + ".dump") + with open(fp, "wb") as f: + for _, value in self.sb.items(): + f.write(value) + print(f"[+] Dumped {fp}") + + def dump_all_superblocks(self): + self.find_all_superblocks() + for i, _ in enumerate(self.sb_locs): + self.dump_superblock(n=i) + + +def main(): + parser = argparse.ArgumentParser(description="UFS file system parser") + parser.add_argument( + "--dump", "-d", action="store_true", default=False, dest="dump", help="Dumps the first superblock to disk" + ) + parser.add_argument( + "--dump_all", "-da", action="store_true", default=False, dest="dump_all", help="Dumps all superblocks to disk" + ) + parser.add_argument( + "--find_all", + "-fa", + action="store_true", + default=False, + dest="find_all", + help="Finds all superblock locations and prints them to stdout. Default: %(default)s", + ) + parser.add_argument("--file_system", "-f", required=True, type=pathlib.Path, help="UFS Filesystem") + parser.add_argument( + "--file_system_type", "-ft", type=str, default="zfs2", dest="fst", help="[zfs1, zfs2]. Default: %(default)s" + ) + + args = parser.parse_args() + + zfs = ZFS(args.file_system, args.fst) + if args.dump: + zfs.dump_superblock() + if args.dump_all: + zfs.dump_all_superblocks() + if args.find_all: + zfs.find_all_superblocks() + res = ", ".join(hex(e) for e in zfs.sb_locs) + print(f"[+] Found superblock offsets: {res}") + + +if __name__ == "__main__": + main() diff --git a/src/Fuzzer/metadata.py b/src/Fuzzer/metadata.py new file mode 100644 index 0000000..53ca38b --- /dev/null +++ b/src/Fuzzer/metadata.py @@ -0,0 +1,52 @@ +import logging +import random +import sys + +from file_system_magic.ext_superblock_parser import EXT +from file_system_magic.fs_util import get_bytearray, set_mime, write_to_file, get_mutated_bytes +from file_system_magic.ufs_superblock_parser import UFS +from file_system_magic.zfs_uberblock_parser import ZFS + + +class MetaMutation: + def __init__(self, fs, nbytes=5, restore=True, mode=None): + self.nbytes = nbytes + self.fs = fs + self.mfs = None + self.mime = None + self.mode = mode + self.s_locs = None + self.restore = restore + self.rnd = random.Random() + self.rnd.seed(random.getrandbits(1024)) + + def mutation(self): + barray = get_bytearray(self.fs) + self.mime = set_mime(self.fs) + if "ufs" in self.mime: + fs_p = UFS(fs=self.fs, fst=self.mime) + elif self.mime == "ext": + fs_p = EXT(fs=self.fs, fst=self.mime) + elif self.mime == "zfs": + fs_p = ZFS(fs=self.fs, fst=self.mime) + else: + logging.error("Could not detect file system type correctly") + sys.exit(1) + self.s_locs = fs_p.find_all_superblocks() + + good_locs = [] + for i in self.s_locs: + for j in range(fs_p.sb_expected_len): + good_locs += i + j + + ctr = 0 + while ctr < self.nbytes: + try: + rnd_pos = random.choice(good_locs) + muta_byte_seq = get_mutated_bytes(1) + barray[rnd_pos] = muta_byte_seq + ctr += 1 + except IndexError as e: + logging.error(e) + return None + return write_to_file(self.fs, self.nbytes, self.mode, barray) diff --git a/src/Fuzzer/radamsa.py b/src/Fuzzer/radamsa.py new file mode 100644 index 0000000..4a66211 --- /dev/null +++ b/src/Fuzzer/radamsa.py @@ -0,0 +1,132 @@ +import logging +import os +import pathlib +import random +import re +import subprocess +import sys + +from file_system_magic.ufs_superblock_parser import UFS, UFS_MAGIC +from file_system_magic.ext_superblock_parser import EXT, EXT_MAGIC +from file_system_magic.zfs_uberblock_parser import ZFS, ZFS_MAGIC +from file_system_magic.fs_util import get_offset_in_sb, set_mime + + +class Radamsa: + def __init__(self, path_to_file_system): + self.radamsa_seed = None + self.path_to_file_system = path_to_file_system + self.path_to_mutated_file_system = None + self.mime = None + + @staticmethod + def _get_ufs_zfs_magic_pos(path_to_file_system, file_system_type=None): + with open(path_to_file_system, "rb") as f: + data = f.read() + magic_positions = [] + if file_system_type == "ufs": + magic_sequence = UFS_MAGIC + elif file_system_type == "zfs": + magic_sequence = ZFS_MAGIC + else: + return False + matches = re.finditer(magic_sequence, data) + for m in matches: + magic_positions.append(m.span()[0]) + return magic_positions + + @staticmethod + def _get_ext_magic_pos(path_to_file_system): + with open(path_to_file_system, "rb") as f: + data = f.read() + match = data.find(EXT_MAGIC) + return [match] + + def _set_magic(self, mgc_offs, mime=None): + # logging.error("[*] Restoring magic bytes in {}".format(self.path_to_mutated_file_system)) + if "ext" in mime: + mgc_seq = EXT_MAGIC + elif "ufs" in mime: + mgc_seq = UFS_MAGIC + elif mime == "zfs": + mgc_seq = ZFS_MAGIC + else: + print("[!] Unknown mime type - Cannot restore magic bytes - radamsa") + sys.exit(1) + with open(self.path_to_mutated_file_system, "rb+") as f: + for m in mgc_offs: + f.seek(m) + f.write(mgc_seq) + + def _restore_magic_bytes(self): + if "ufs" in self.mime: + fs_p = UFS(fs=self.path_to_file_system, fst=self.mime) + fn = "fs_magic" + elif self.mime == "ext": + fs_p = EXT(fs=self.path_to_file_system, fst=self.mime) + fn = "ext2fs_magic" + elif self.mime == "zfs": + fs_p = ZFS(fs=self.path_to_file_system, fst=self.mime) + fn = "ub_magic" + else: + logging.error("Could not detect file system type correctly") + sys.exit(1) + sb_locs = self._get_magic_offs_lst(fs_p, fn) + self._set_magic(sb_locs, self.mime) + + @staticmethod + def _get_magic_offs_lst(fs_p, mgc_n): + sb_locs = fs_p.find_all_superblocks() + magic_off, _ = get_offset_in_sb(fs_p, mgc_n) + for i, _ in enumerate(sb_locs): + sb_locs[i] = sb_locs[i] + magic_off + return sb_locs + + def _restore_uberblock(self): + sbs = [] + if "ufs" in self.mime: + fsp = UFS(fs=self.path_to_file_system, fst=self.mime) + elif "ext" in self.mime: + fsp = EXT(fs=self.path_to_file_system, fst=self.mime) + elif self.mime == "zfs": + fsp = ZFS(fs=self.path_to_file_system, fst=self.mime) + else: + logging.error("Could not detect file system type correctly") + return 0 + sb_locs = fsp.find_all_superblocks() + with open(self.path_to_file_system, "rb") as f: + for loc in sb_locs: + f.seek(loc) + sbs += f.read(fsp.expected_sb_len) + with open(self.path_to_mutated_file_system, "wb") as f: + for i, loc in enumerate(sb_locs): + f.seek(loc) + f.write(sbs[i]) + + def mutation(self, preserve_magic=True, preserve_uberblock=False, determinism=True): + self.mime = set_mime(self.path_to_file_system) + name = pathlib.Path(self.path_to_file_system).name + _path = pathlib.Path(self.path_to_file_system).parent + self.path_to_mutated_file_system = os.path.join(_path, "radamsa_" + name) + if determinism: + self.radamsa_seed = random.getrandbits(100) + cmd = "radamsa {} -s {} > {}".format(self.path_to_file_system, self.radamsa_seed, self.path_to_mutated_file_system,) + else: + cmd = "radamsa {} > {}".format(self.path_to_file_system, self.path_to_mutated_file_system) + if preserve_uberblock: + preserve_magic = False + subprocess.call(cmd, shell=True) + if preserve_magic: + self._restore_magic_bytes() + if preserve_uberblock: + self._restore_uberblock() + return self.radamsa_seed, self.path_to_mutated_file_system + + +def main(): + rad = Radamsa(sys.argv[1]) + rad.mutation(preserve_magic=True) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/src/Manager/Manager.py b/src/Manager/Manager.py new file mode 100644 index 0000000..d6d7928 --- /dev/null +++ b/src/Manager/Manager.py @@ -0,0 +1,925 @@ +import datetime +import getpass +import ipaddress +import logging +import lzma +import os +import pathlib +import socket +import subprocess +import sys +import time +import zipfile +from io import BytesIO + +import colorama as clr +import libvirt +import magic +import paramiko +import wget +from PIL import Image, ImageFile + +from SnapshotTemplate import snapshot + + +def get_absolute_path(_path): + if _path[0] == "~" and not os.path.exists(_path): + _path = os.path.expanduser(_path) + abs_path = os.path.abspath(_path) + return abs_path + + +def check_if_file_exists(_path): + if pathlib.Path(_path).exists(): + return True + else: + return False + + +def create_directory(_path): + pathlib.Path(_path).mkdir(parents=True, exist_ok=True) + return _path + + +def create_empty_file(_path, fn): + pathlib.Path(os.path.join(_path, fn)).touch() + + +def get_basename(_path): + return str(pathlib.Path(str(_path)).name) + + +def get_parent_path(_path): + return str(pathlib.Path(str(_path)).parent) + + +def kill_process_by_pid(process): + # don't send the signal unless it seems it is necessary + if process.poll() is None: + try: + process.kill() + except OSError: + pass + + +class VmManager: + def setup(self, **kwargs): + if "name" in kwargs: + self.name = kwargs["name"] + if "vm_arch" in kwargs: + self.vm_arch = kwargs["vm_arch"] + if "port" in kwargs: + self.port = kwargs["port"] + if "enable_kvm" in kwargs: + if True or False in kwargs["enable_kvm"]: + self.enable_kvm = kwargs["enable_kvm"] + else: + pass + if "url" in kwargs: + self.url = kwargs["url"] + if "save_dl_to" in kwargs: + self.save_dl_to = get_absolute_path(kwargs["save_dl_to"]) + if "save_unpck_to" in kwargs: + self.save_unpck_to = get_absolute_path(kwargs["save_unpck_to"]) + if "save_unpck_as" in kwargs: + self.save_unpck_as = kwargs["save_unpck_as"] + if "unpckd_url_cntnt" in kwargs: + if check_if_file_exists(get_absolute_path(kwargs["unpckd_url_cntnt"])) != 0: + self.path_to_iso_or_qcow = kwargs["unpckd_url_cntnt"] + else: + print("{} does not exist!".format(kwargs["unpckd_url_cntnt"])) + sys.exit(1) + if "path_to_archive" in kwargs: + self.p_archive = get_absolute_path(kwargs["path_to_archive"]) + if "copy_files_to" in kwargs: + self.copy_files_to = get_absolute_path(kwargs["copy_files_to"]) + if "vm_memory" in kwargs: + self.vm_memory = kwargs["vm_memory"] + if "vm_cpus" in kwargs: + self.vm_cpus = kwargs["vm_cpus"] + if "vm_hdd" in kwargs: + self.vm_hdd = kwargs["vm_hdd"] + if "vm_user" in kwargs: + self.vm_user = kwargs["vm_user"] + if "vm_password" in kwargs: + self.vm_password = kwargs["vm_password"] + + def __init__(self): + logging.basicConfig(level=logging.INFO) + logging.getLogger("paramiko").setLevel(logging.CRITICAL) + self.name = "" + self.vm_arch = "x86" # The vm_type,enable_kvm flags are only relevant + self.port = 22 # without having it installed + self.enable_kvm = True # enables hardware virtualization features + self.url = None # iso/qcow download URL + self.save_dl_to = "/tmp" # save download to + self.save_dl_as = None # save download file as + self.save_unpck_to = "/tmp" # save unpacked file to + self.save_unpck_as = None # save unpacked file as + self.path_to_iso_or_qcow = None # unzipped .xz image + self.p_archive = None # path specified by self.save_url_cntnt_to + self.save_url_cntnt_as + self.copy_files_to = None # path can set for copies between host<->guest if path shall stay static + self.vm_user = None # saved username for booted VM + self.vm_password = None # saved passwd for booted VM + self.vm_ip = "127.0.0.1" # saved IPv4 for booted VM + self.vm_memory = 4096 # RAM of booted VM + self.vm_cpus = 2 # Number of cores of VM + self.vm_hdd = 10 # VM HDD size in GB + self.rshell = None # remote shell object for host<-> operations + self.curr_crash_dir = None # is set to path new directory path for current crash + self.conn_err_ctr = 0 # counter for connerr that might be a hint towards a broken VM + + def __exit__(self): + return 1 + + ###################################################################################################### + # BASIC VM OPERATIONS VIA PARAMIKO SSH # + ###################################################################################################### + + def _get_basic_ssh_conn(self): + self.get_vm_credentials() + ssh_conn = paramiko.SSHClient() + ssh_conn.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + ssh_conn.connect( + hostname=self.vm_ip, + port=self.port, + username=self.vm_user, + password=self.vm_password, + look_for_keys=False, + allow_agent=False, + timeout=15, + ) + return ssh_conn + + def get_vm_credentials(self): + if self.vm_user is None or self.vm_password is None: + self.vm_user = str(input('Username for "{}": '.format(self.name))) + self.vm_password = getpass.getpass("Password: ") + else: + logging.debug("Reusing stored vm credentials.") + + def invoke_remote_ssh_shell(self): + if not self.silent_vm_state(): + self.reset_vm() + ssh_conn = self._get_basic_ssh_conn() + ssh_conn.get_transport().set_keepalive(200) + ssh_conn.get_transport().open_session() + ssh_conn.invoke_shell() + self.rshell = ssh_conn + return ssh_conn + + def _exec(self, cmd, timeout=10): + if not self.rshell: + self.invoke_remote_ssh_shell() + try: + # get_pty=True combines stdout/stderr + _, stdout, _ = self.rshell.exec_command(cmd, get_pty=True, timeout=timeout) + stdout_decoded = stdout.read().decode().strip() + if stdout_decoded != "": + return stdout_decoded + else: + return None + except (paramiko.ssh_exception.SSHException, socket.timeout, paramiko.ssh_exception.NoValidConnectionsError,) as e: + logging.debug("_EXEC ERROR: {}".format(e)) + return 2 + except UnicodeDecodeError: + return 1 + + def exec_cmd_quiet(self, cmd): + stdout = self._exec(cmd) + return stdout + + def exec_cmd(self, cmd): + stdout = self._exec(cmd) + print(">> {}".format(stdout)) + return stdout + + def exec_get_return_code(self, cmd): + res = str(self.exec_cmd_quiet(cmd)) + if int(res[-1]) != 0: + return False + else: + return True + + def interactive_shell(self): + print(clr.Fore.RED + 'Exit remote shell via "exit"' + clr.Fore.RESET) + while True: + command = input("$> ") + if str.lower(command.strip()) == "exit": + self.__exit__() + self._exec(command) + + def zip_files(self, path_to_save_archive_in, files, archive_path): + file_list = " ".join(os.path.join(path_to_save_archive_in, f) for f in files) + logging.debug("Packing {} in {}".format(file_list, archive_path)) + return self.exec_get_return_code("tar -jcvf {} {}; echo $?".format(archive_path, file_list)) + + def mkdir(self, rpath): + return self.exec_get_return_code("/bin/mkdir -p {}; echo $?".format(rpath)) + + def rm_files(self, rpath): + return self.exec_get_return_code("/bin/rm -rf {}; echo $?".format(rpath)) + + def vm_ls(self, rpath): + return self._exec("/bin/ls -lah {}".format(rpath)) + + @staticmethod + def _prep_file_list(list_of_files_to_copy, files_to_copy, save_files_at): + if isinstance(files_to_copy, str): + list_of_files_to_copy.append(os.path.join(save_files_at, files_to_copy)) + else: + list_of_files_to_copy.extend(files_to_copy) + list_of_files_to_copy[:] = [os.path.join(save_files_at, x) for x in list_of_files_to_copy] + return list_of_files_to_copy + + def _get_files(self, list_of_files_to_copy, save_files_at): + try: + if not self.rshell: + self.invoke_remote_ssh_shell() + ftp_client = self.rshell.open_sftp() + for f in list_of_files_to_copy: + ftp_client.get(f, os.path.join(save_files_at, get_basename(f))) + ftp_client.close() + except paramiko.ssh_exception.SSHException as e: + logging.error("SSHException during get files: {}\nResetting and trying to invoke new rshell".format(e)) + self.reset_vm() + self.new_rshell() + self._get_files(list_of_files_to_copy, save_files_at) + + def cp_to_host(self, save_files_at, get_files_from, list_of_files_to_copy, zipped=False): + sanitized_list_of_files_to_copy = [] + try: + save_files_at, get_files_from = ( + get_absolute_path(save_files_at), + get_absolute_path(get_files_from), + ) + self.mkdir(save_files_at) + if zipped: + archive_name = str(datetime.datetime.today().strftime("%d_%m_%Y")) + ".bzip2" + archive_path = os.path.join("/tmp", archive_name) + if self.zip_files(get_files_from, list_of_files_to_copy, archive_path=archive_path): + sanitized_list_of_files_to_copy.append(archive_path) + else: + logging.error("Failed to compress: {}/{}".format(get_files_from, list_of_files_to_copy)) + sanitized_list_of_files_to_copy = self._prep_file_list( + sanitized_list_of_files_to_copy, list_of_files_to_copy, get_files_from, + ) + else: + sanitized_list_of_files_to_copy = self._prep_file_list( + sanitized_list_of_files_to_copy, list_of_files_to_copy, get_files_from, + ) + self._get_files(sanitized_list_of_files_to_copy, save_files_at) + return 1 + # except (TypeError, OSError) as e: + # logging.error('Encountered an error while fetching files: {}'.format(e)) + # return 0 + except FileNotFoundError: + logging.error("To host: One or more files of {} not found".format(list_of_files_to_copy)) + return None + + def _send_files(self, list_of_files_to_copy, save_files_at): + try: + if not self.rshell: + self.invoke_remote_ssh_shell() + ftp_client = self.rshell.open_sftp() + for f in list_of_files_to_copy: + ftp_client.put(f, os.path.join(save_files_at, get_basename(f))) + ftp_client.close() + except paramiko.ssh_exception.SSHException as e: + logging.error("SSHException during send files: {}\n Trying to invoke new rshell".format(e)) + self.new_rshell() + self._send_files(list_of_files_to_copy, save_files_at) + + def cp_to_guest(self, get_files_from, list_of_files_to_copy, save_files_at, zipped=False): + try: + get_files_from, save_files_at = ( + get_absolute_path(get_files_from), + get_absolute_path(save_files_at), + ) + self.mkdir(save_files_at) + sanitized_list_of_files_to_copy = [] + if zipped: + file_list = " ".join(os.path.join(get_files_from, f) for f in list_of_files_to_copy) + with zipfile.ZipFile("/tmp/files.zip", "w", compression=zipfile.ZIP_DEFLATED) as myzip: + for f in file_list: + # arcname removes dirpath to actual file and just takes the file itself + myzip.write(f, arcname=pathlib.Path(f).name) + sanitized_list_of_files_to_copy.append("/tmp/files.zip") + else: + sanitized_list_of_files_to_copy = self._prep_file_list( + sanitized_list_of_files_to_copy, list_of_files_to_copy, get_files_from, + ) + self._send_files(sanitized_list_of_files_to_copy, save_files_at) + # except (TypeError, OSError) as e: + # logging.error('Encountered an error while fetching files: {}'.format(e)) + # return 0 + except FileNotFoundError: + logging.error("To guest: One or more files of {} not found".format(list_of_files_to_copy)) + return None + + def get_last_changed_file_in_dir(self, search_path): + cmd = "/bin/ls -t {} | head -n1".format(search_path) + try: + latest_file = self._exec(cmd) + logging.debug(latest_file) + return search_path, latest_file + except AttributeError as e: + logging.debug(e) + + def _get_latest_core(self): + try: + core_files = [] + find_latest_core_file_cmd = '/usr/bin/find /var/crash -name "core*" -print0' + latest_core_file = self._exec(find_latest_core_file_cmd) + if not latest_core_file: + return None + else: + find_latest_core_file_cmd = ( + '/usr/bin/find /var/crash -name "core*" -print0 | /usr/bin/xargs -0 ls -t | /usr/bin/head -n1' + ) + latest_core_file = self._exec(find_latest_core_file_cmd) + find_latest_vmcore_cmd = ( + '/usr/bin/find /var/crash -name "vmcore*" -print0 | /usr/bin/xargs -0 ls -t | /usr/bin/head -n1' + ) + latest_vmcore_file = self._exec(find_latest_vmcore_cmd) + get_core_file_size_cmd = '/usr/bin/stat {} | /usr/bin/cut -d" " -f8'.format(latest_core_file) + if latest_core_file and latest_vmcore_file and int(self._exec(get_core_file_size_cmd).strip()) > 1: + core_files.append(os.path.join("/var/crash", latest_core_file.strip())) + core_files.append(os.path.join("/var/crash", latest_vmcore_file.strip())) + return core_files + else: + return None + except ValueError: + return None + + def fetch_latest_core_file(self): + self.curr_crash_dir = None + try: + latest_core_files = self._get_latest_core() + logging.debug("LATEST CORES: {}".format(latest_core_files)) + if len(latest_core_files) == 2: + _timestamp_dir = os.path.join("crash_dumps", self._get_timestamp()) + self.curr_crash_dir = os.path.join(os.getcwd(), _timestamp_dir) + create_directory(self.curr_crash_dir) + for list_entry in latest_core_files: + if "core.txt" in list_entry: + zipped_enable = False + else: + zipped_enable = False + self.cp_to_host( + save_files_at=self.curr_crash_dir, + get_files_from=get_parent_path(list_entry), + list_of_files_to_copy=get_basename(list_entry), + zipped=zipped_enable, + ) + return 1 + else: + logging.error("No new core files found!") + return 0 + except TypeError: + logging.error("No core file(s) found. Continuing!") + return 0 + + def fetch_all_core_files(self): + get_all_core_files_cmd = '/bin/ls /var/crash/ | grep "core.txt"' + # gets a list of files without any empty string entries + core_files = list(filter(None, self._exec(get_all_core_files_cmd).split("\n"))) + if core_files: + all_cores = " ".join(f for f in core_files) + self.cp_to_host( + save_files_at="crash_dumps/", get_files_from="/var/crash/", list_of_files_to_copy=all_cores, + ) + else: + logging.info("No core files found!") + + def check_vm_state(self): + try: + if not int( + subprocess.check_output( + "timeout 3 nc -z {} 22; echo $?".format(self.vm_ip), shell=True, encoding="utf-8", + ).strip() + ): + print(clr.Fore.GREEN + "[+] VM status: {}".format("OK" + clr.Fore.RESET)) + return 1 + else: + print(clr.Fore.RED + "[!] VM status: {}".format("Not Responding" + clr.Fore.RESET)) + return 0 + except subprocess.TimeoutExpired: + print(clr.Fore.RED + "[!] VM status: {}".format("Not Responding" + clr.Fore.RESET)) + return 0 + + def silent_vm_state(self): + if not int( + subprocess.check_output("timeout 3 nc -z {} 22; echo $?".format(self.vm_ip), shell=True, encoding="utf-8",).strip() + ): + # ret code was 0, VM reachable + return 1 + else: + return 0 + + def crash_handler(self): + print(clr.Fore.LIGHTYELLOW_EX + "[*] Checking for crash dump..!" + clr.Fore.RESET) + try: + self.reset_vm() + return self._return_core_path_if_present() + except paramiko.ssh_exception.NoValidConnectionsError as e: + logging.error("NoValidConnErr in Manager crash handler: {}\n self.cerr is {}".format(e, self.conn_err_ctr)) + self.conn_err_ctr += 1 + if self.conn_err_ctr == 2: + self.conn_err_ctr = 0 + # Probably stuck in a boot loop at this point because of a broken system + # ext2: fsck /dev/ad0p2: Segmentation fault + # Unknown error1: help! + self.restore_snapshot(self.get_current_snapshot()) + self.new_rshell() + else: + self.crash_handler() + + def _return_core_path_if_present(self): + self.new_rshell() + if self.fetch_latest_core_file(): + print(clr.Fore.LIGHTYELLOW_EX + "\t[*] Found core file" + clr.Fore.RESET) + self.conn_err_ctr = 0 + return self.curr_crash_dir + else: + self.conn_err_ctr = 0 + return None + + def new_rshell(self): + self.rshell = None + self.invoke_remote_ssh_shell() + + ###################################################################################################### + # LIBVIRT VM OPERATIONS # + ###################################################################################################### + + def test_install(self): + if subprocess.run("virsh list --all".split(), stdout=subprocess.DEVNULL) and subprocess.run( + "qemu-system-{} --help".format(self.vm_arch).split(), stdout=subprocess.DEVNULL, + ): + logging.info("Tests passed!") + else: + logging.error("QEMU and/or libvirt not properly installed!") + sys.exit(1) + + def _boot_sleep(self, sleep_timer_in_seconds): + sys.stdout.write(clr.Fore.LIGHTYELLOW_EX + "\t[*] Please stand by." + clr.Fore.RESET) + for i in range(sleep_timer_in_seconds): + sys.stdout.write(clr.Fore.LIGHTYELLOW_EX + "." + clr.Fore.RESET) + sys.stdout.flush() + time.sleep(1) + sys.stdout.write("\033[F") # back to previous line + + @staticmethod + def get_open_libvirt_connection(): + conn = libvirt.open() + if conn is None: + logging.error("Failed to open connection to hypervisor") + sys.exit(1) + else: + return conn + + def get_domain_object(self): + conn = self.get_open_libvirt_connection() + dom = conn.lookupByName(self.name) + return conn, dom + + def set_vcpus(self, vcpus): + conn, dom = self.get_domain_object() + try: + dom.setVcpus(vcpus) + except libvirt.libvirtError: + logging.error("Failed to set new max amount of vcpus for {}!".format(dom.name())) + finally: + conn.close() + + def set_memory(self, memory): + conn, dom = self.get_domain_object() + try: + dom.setMemory(memory) + except libvirt.libvirtError: + logging.error("Failed to set new max amount of RAM for {}!".format(dom.name())) + finally: + conn.close() + + def list_installed_vms(self): + conn = self.get_open_libvirt_connection() + hosts = conn.listAllDomains(0) + print("[*] Found vms: [" + ", ".join(h.name() for h in hosts) + "]") + conn.close() + + def get_ip_of_vm(self): + # TODO: Fix by utilizing libvirts python API + iface = subprocess.check_output("virsh domifaddr {}".format(self.name).split(), encoding="utf-8") + ipv4 = iface.split()[-1].split("/")[0].strip() + try: + if ipaddress.ip_address(ipv4): + self.vm_ip = ipv4 + except ValueError as e: + logging.error("[!] Failed to fetch an IPv4 address of {}".format(self.name)) + logging.error("Expected: xxy.xxy.xxy.xyz") + logging.error("Got : {}".format(e)) + logging.error("[*] Trying to restore from snapshot") + cur_snap = self.get_current_snapshot() + if cur_snap: + self.restore_snapshot(cur_snap) + self.reset_vm() + self.quick_boot(self.name) + else: + logging.error("[!] No snapshot found. Trying to reset VM instead") + self.reset_vm() + self.get_ip_of_vm() + + def quick_boot(self, vm_name): + try: + self.name = vm_name + conn, dom = self.get_domain_object() + self.get_vm_credentials() + if not dom.isActive(): + dom.create() + # needs around 60 seconds until booting seq started network ifaces + self._boot_sleep(60) + self.get_ip_of_vm() + print("\n[+] VM started @ {}!".format(self.vm_ip)) + else: + self.get_ip_of_vm() + conn.close() + except libvirt.libvirtError: + pass + + def boot_vm(self): + if self.list_installed_vms() != "": + print("[*] Which VM do you want to start?") + self.name = input(">> ") + conn = self.get_open_libvirt_connection() + dom = conn.lookupByName(self.name) + active = dom.isActive() + if active == 1: + self.get_ip_of_vm() + else: + dom.create() + self._boot_sleep(60) + self.get_ip_of_vm() + print("[+] VM started @ {}!".format(self.vm_ip)) + conn.close() + else: + print("[!] No VMs found!") + sys.exit(1) + + def shutdown_vm(self): + conn, dom = self.get_domain_object() + dom.shutdown() + conn.close() + + def suspend_vm(self): + conn, dom = self.get_domain_object() + dom.suspend() + conn.close() + + def resume_vm(self): + conn, dom = self.get_domain_object() + self._boot_sleep(20) + dom.resume() + conn.close() + + def reset_vm(self): + # Reset emulates the power reset button on a machine, where all + # hardware sees the RST line set and re-initializes internal state + conn, dom = self.get_domain_object() + dom.reset() + self._boot_sleep(40) + timer = 40 + while True: + if timer > 120: + logging.error("\nCould not fully boot in {} seconds. Resetting VM again!".format(timer)) + self.restore_snapshot(self.get_current_snapshot()) + break + elif not self.silent_vm_state(): + sys.stdout.write(".....") + sys.stdout.flush() + time.sleep(5) + timer += 5 + else: + break + print("\n") + conn.close() + + def reboot_vm(self): + # The hypervisor will choose the method of shutdown it considers best + conn, dom = self.get_domain_object() + dom.reboot() + self._boot_sleep(60) + conn.close() + + def force_stop_vm(self): + conn, dom = self.get_domain_object() + dom.destroy() + conn.close() + + def delete_vm(self, vm_name): + conn = self.get_open_libvirt_connection() + try: + pool = conn.storagePoolLookupByName("default") + dom = conn.lookupByName(vm_name) + dom.undefineFlags(libvirt.VIR_DOMAIN_UNDEFINE_NVRAM) + stgvol = pool.storageVolLookupByName("{}.qcow2".format(self.name)).path() + if stgvol: + stgvol.wipe(0) + stgvol.delete(0) + except libvirt.libvirtError as e: + logging.error("Failed to properly delete: {}".format(e)) + finally: + conn.close() + + def rename_vm(self, new_name): + conn, dom = self.get_domain_object() + dom.rename(new_name) + conn.close() + + def clone_vm(self, clone_name): + # TODO: Fix by utilizing libvirts python API + conn, dom = self.get_domain_object() + domname = dom.name() + cmd = "virt-clone --original {} --name {} --auto-clone".format(domname, clone_name) + subprocess.call(cmd.split()) + + def _png_writer(self, stream, data, buffer): + # Writes screenshot to disk + ImageFile.LOAD_TRUNCATED_IMAGES = True + buffer.write(data) + buffer.seek(0) + image = Image.open(buffer) + image.save(os.path.join("vm_screenshots", "{}_{}.png".format(self.name, self._get_timestamp()))) + + @staticmethod + def _get_timestamp(): + time_stamp = datetime.datetime.now().isoformat(timespec="seconds") + time_stamp = str(time_stamp).replace(":", "_").replace(" ", "_").rsplit(".")[0] + return time_stamp + + def take_screenshot(self): + conn = self.get_open_libvirt_connection() + create_directory(os.path.join(os.getcwd(), "vm_screenshots")) + dom = conn.lookupByName(self.name) + if dom.isActive(): + stream = conn.newStream() + dom.screenshot(stream=stream, screen=0) + buffer = BytesIO() + stream.recvAll(self._png_writer, buffer) + stream.finish() + conn.close() + + @staticmethod + def get_snapshot_xml_representation(dom, snap_name=None): + raw_xml = dom.XMLDesc(0) + if snap_name: + return snapshot.xml_head_name.format(snap_name) + raw_xml + snapshot.xml_tail + else: + return snapshot.xml_head.format(snap_name) + raw_xml + snapshot.xml_tail + + def create_snapshot(self): + conn, dom = self.get_domain_object() + try: + xml_descr = self.get_snapshot_xml_representation(dom) + dom.snapshotCreateXML(xml_descr) + except libvirt.libvirtError: + logging.error("Failed to create snapshot for {}".format(self.name)) + finally: + conn.close() + + def create_snapshot_with_name(self, snap_name): + conn, dom = self.get_domain_object() + try: + xml_descr = self.get_snapshot_xml_representation(dom, snap_name) + dom.snapshotCreateXML(xml_descr) + except libvirt.libvirtError as e: + logging.error("{} - Failed to create snapshot: {}".format(dom, e)) + finally: + conn.close() + + def delete_snapshot(self, snap_name): + conn, dom = self.get_domain_object() + snap_list = dom.snapshotListNames() + if snap_name in snap_list: + try: + _snapshot = dom.snapshotLookupByName(snap_name) + _snapshot.delete() + except libvirt.libvirtError as e: + logging.error("{} - Failed to delete snapshot: {}".format(snap_name, e)) + conn.close() + + def list_snapshots(self): + conn, dom = self.get_domain_object() + snapshots = dom.listAllSnapshots() + if snapshots: + print("[*] Found snapshots: " + ", ".join(x.getName() for x in snapshots)) + return snapshots + else: + logging.error("Failed to find any snapshots for {}!".format(self.name)) + conn.close() + + def restore_snapshot(self, snap_name): + conn, dom = self.get_domain_object() + try: + snap = dom.snapshotLookupByName(snap_name) + dom.revertToSnapshot(snap) + self.get_vm_credentials() + if not dom.isActive(): + dom.create() + # needs around 60 seconds until booting seq started network ifaces + self._boot_sleep(60) + conn.close() + logging.warning("Successfully reset {} to snapshot: {}, VM status: {}".format(dom.name(), snap_name, dom.state())) + except libvirt.libvirtError: + logging.error("Failed to reset {} to snapshot: {}".format(dom.name(), snap_name)) + + def get_current_snapshot(self): + conn, dom = self.get_domain_object() + try: + cur = dom.snapshotCurrent().getName() + return cur + except libvirt.libvirtError: + logging.error("Failed to find current snapshots for {}!".format(dom.name())) + return None + finally: + conn.close() + + ###################################################################################################### + # VM IMAGE FETCHING AND INSTALLATION # + ###################################################################################################### + + def get_img(self, url, save_to): + """ + Attempts to download a(n) (packen) iso + :param url: Full URL to image + :param save_to: lpath to save to + :return: path to downloaded file + """ + if self.p_archive: + print("[!] Archive specified!\nAborting image fetch") + if not url: + print("[!] Requires url!\nAborting...") + sys.exit(1) + else: + create_directory(save_to) + url_split_archive_name_only = url.split("/")[-1] + save_img = get_absolute_path(os.path.join(save_to, url_split_archive_name_only)) + if check_if_file_exists(save_img): + print("[!] File {} already exists.".format(save_img)) + self.p_archive = save_img + else: + print("[*] Fetching {}".format(url)) + if wget.download(url, save_img): + self.p_archive = save_img + if "QEMU QCOW Image" in magic.from_file(self.p_archive): + self.path_to_iso_or_qcow = self.p_archive + return self.p_archive + + def _unpack_lzma(self, save_as): + """ + Unpacks a lzma compatible archive (e.g ISO.xz) + :param save_as: save ISO as + :return: path to unpacked content + """ + with lzma.open(self.p_archive) as f, open(save_as, "wb") as fout: + logging.info("Decompressing....") + file_cntnt = f.read() + fout.write(file_cntnt) + fout.close() + self.path_to_iso_or_qcow = save_as + + def _set_unpckd_path(self, save_as, save_to): + """ + Some path demangling + :param save_as: Name of unpacked iso.xz + :param save_to: Path to save unpacked iso.xz to + :return: + """ + img_n = "" + archive_no_ext, _ = os.path.splitext(self.p_archive) + save_to = get_absolute_path(save_to) + if save_as and save_to: + img_n = os.path.join(save_to, save_as) + elif save_as and save_to is None: + abs_path_without_archive = pathlib.Path(self.p_archive).parent + img_n = os.path.join(abs_path_without_archive, save_as) + elif save_as is None and save_to: + base_name = pathlib.Path(archive_no_ext).name + img_n = os.path.join(save_to, base_name) + elif save_as is None and save_to is None: + img_n = archive_no_ext + return get_absolute_path(img_n) + + def unpack(self, save_as, save_to): + """ + Unpack downloaded ISO.xz as save_as to save_to + :param save_as: Name of unpacked iso.xz + :param save_to: Path to save unpacked iso.xz to + """ + create_directory(save_to) + if check_if_file_exists(self.p_archive): + unpkd_img_name = self._set_unpckd_path(save_as, save_to) + logging.debug("[*] Trying to decompress {} as {}".format(self.p_archive, unpkd_img_name)) + if not pathlib.Path(unpkd_img_name).exists(): + self._unpack_lzma(unpkd_img_name) + else: + logging.debug("[!] Error unpacking {}".format(self.p_archive)) + + def _install(self, iso): + abs_iso = get_absolute_path(iso) + cmd = "virt-install --name {}\ + --memory {}\ + --vcpus {}\ + --disk size={}\ + --cdrom {}\ + --os-variant freebsd8".format( + self.name, self.vm_memory, self.vm_cpus, self.vm_hdd, abs_iso + ) + subprocess.run(cmd.split()) + + def install_vm( + self, iso=None, url_iso=None, url_zip=None, save_dl_to="~/Downloads", save_unpckd_to=None, save_unpckd_as=None, + ): + """ + Setups a VM install that varies on the supplied parameters + :param iso: ISO.iso VM image + :param url_iso: Full URL to a ISO.iso image + :param url_zip: Full URL to a iso.iso.xz image + :param save_dl_to: Path to save the downloaded content to + :param save_unpckd_to: Path to save the unpacked downloaded content to + :param save_unpckd_as: Full Path that specifies the name of the unpacked content + """ + if iso: + self._install(iso) + if url_iso: + self.get_img(url_iso, save_to=save_dl_to) + self._install(self.p_archive) + if url_zip: + self.get_img(url=url_zip, save_to=save_dl_to) + self.unpack(save_to=save_unpckd_to, save_as=save_unpckd_as) + self._install(self.path_to_iso_or_qcow) + + +###################################################################################################### +# QUICK QEMU BOOT WITHOUT INSTALLATION # +###################################################################################################### + + +class QEMU(VmManager): + def __init__( + self, name, architecture, path_to_hdd, enable_kvm=True, port=22, ip="127.0.0.1", memory=2048, + ): + super(QEMU, self).__init__() + logging.basicConfig(level=logging.INFO) + logging.getLogger("paramiko").setLevel(logging.CRITICAL) + self.name = name + self.vm_arch = architecture + self.port = port + self.enable_kvm = enable_kvm + self.qemu_process = None + self.vm_memory = memory + self.ip = ip + self.path_to_iso_or_qcow = path_to_hdd + + def qemu_boot_qcow(self): + """ + Requires a proper prior VmManager.setup(...) call to set all the necessary parameters + """ + if self.enable_kvm: + qemu_cmd = ( + "qemu-system-{} -m {} --enable-kvm" + " -netdev user,id=mynet0,hostfwd=tcp:{}:{}-:22" + " -device e1000,netdev=mynet0 {}".format( + self.vm_arch, self.vm_memory, self.vm_ip, self.port, self.path_to_iso_or_qcow, + ) + ) + else: + qemu_cmd = ( + "qemu-system-{} -m {}" + " -netdev user,id=mynet0,hostfwd=tcp:{}:{}-:22" + " -device e1000,netdev=mynet0 {}".format( + self.vm_arch, self.vm_memory, self.vm_ip, self.port, self.path_to_iso_or_qcow, + ) + ) + logging.debug(qemu_cmd) + try: + active_machine = subprocess.Popen(qemu_cmd.split(), stdout=subprocess.PIPE, preexec_fn=os.setsid) + self.qemu_process = active_machine + if self.qemu_process.poll() is None: + print("[*] Sleeping for 60s to wait for boot...") + self._boot_sleep(60) + else: + sys.exit(1) + return active_machine + except RuntimeError as e: + logging.debug(e) + + +def main(): + vm = VmManager() + vm.setup(name="fuzzbox") + vm.install_vm(iso="~/Downloads/FreeBSD-11.2-RELEASE-amd64-dvd1.iso") + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/src/Manager/Manager_FreeBSD.py b/src/Manager/Manager_FreeBSD.py new file mode 100644 index 0000000..5f4ca72 --- /dev/null +++ b/src/Manager/Manager_FreeBSD.py @@ -0,0 +1,120 @@ +import logging +import os +import re + +import paramiko + + +class FreeBSD: + def __init__(self, rfile, mount_at, vm_object): + logging.basicConfig(level=logging.DEBUG) + self.bdev = None + self.fs_type = None + self.rfile = rfile + self.mount_at = mount_at + self.vm_object = vm_object + self.pool = None + + def make_block_device(self): + logging.debug("CREATING BLKDEV FOR: {}".format(self.rfile)) + cmd = "/sbin/mdconfig -a -t vnode -f {}".format(self.rfile) + logging.debug(cmd) + self.bdev = os.path.join("/dev", self.vm_object.exec_cmd_quiet(cmd)) + + def destroy_bdev(self): + cmd = "/sbin/mdconfig -d -u {}".format(self.bdev) + logging.debug(cmd) + return self.vm_object.exec_cmd_quiet(cmd) + + def _determine_fs_type(self): + if self.vm_object.silent_vm_state(): + out = self.vm_object.exec_cmd_quiet("/usr/bin/file {}".format(self.rfile)) + match = re.search(r"ext[1-4] filesystem data", out) + if match: + self.fs_type = match.group(0).split()[0] + elif "Unix Fast File system" in out: + self.fs_type = "ufs" + elif "data" in out: + self.fs_type = "zfs" + + def _clean_mount_dir(self): + self.vm_object.rm_files(self.mount_at) + self.vm_object.mkdir(self.mount_at) + + def _get_mount_switch(self): + if any(x == self.fs_type for x in ["ext2", "ext3", "ext4"]): + flag = "ext2fs" + elif self.fs_type == "ufs": + flag = "ufs" + else: + logging.debug("Malformed file system") + logging.debug('Trying mount -t "auto" ...') + flag = "auto" + return flag + + def _mount_ext_ufs(self): + cmd = '/sbin/mount -t "{}" {} {}'.format(self._get_mount_switch(), self.bdev, self.mount_at) + logging.debug(cmd) + if not self.vm_object.exec_cmd_quiet(cmd): + return 1 # Success + else: + logging.debug("Mounting of {} failed".format(self.bdev)) # Failed + return 0 + + def _mount_zfs(self): + res = self.vm_object.exec_cmd_quiet("zpool import") + logging.debug("ZPOOL IMPORT STDOUT: <<{}>>".format(res)) + if res and len(str(res)) > 2: + self.pool = res.split()[1] + if not self.vm_object.exec_cmd_quiet("zpool import {} -f".format(self.pool)): + return 1 # Success + else: + return 0 + else: + logging.debug("No zpool to import found") + return 0 + + def mount_file_system(self): + try: + self._clean_mount_dir() + self._determine_fs_type() + self.make_block_device() + if any(mime in self.fs_type for mime in ["ext2", "ext3", "ext4", "ufs"]) and self._mount_ext_ufs(): + return 1 + # ugly hack for zfs + elif "data" in self.fs_type and self._mount_zfs(): + return 1 + else: + if self.vm_object.silent_vm_state(): + return 0 + else: + return 2 + except TypeError: + return None + + def _unmount_ext_ufs(self): + cmd_mount = "/sbin/umount -f {}".format(self.mount_at) + logging.debug(cmd_mount) + if not self.vm_object.exec_cmd_quiet(cmd_mount) and not self.destroy_bdev(): + return 1 # Success + else: + logging.debug("Failed to properly umount {}".format(self.mount_at)) + return 0 + + def _unmount_zfs(self): + cmd_zpool_export = "zpool export {}".format(self.pool) + logging.debug(cmd_zpool_export) + if not self.vm_object.exec_cmd_quiet(cmd_zpool_export) and not self.destroy_bdev(): + return 1 # Success + else: + logging.debug("Failed to export pool".format(self.pool)) + return 0 + + def unmount_file_system(self): + try: + if any(ext in self.fs_type for ext in ["ext2", "ext3", "ext4", "ufs"]): + return self._unmount_ext_ufs() + elif "data" in self.fs_type: + return self._unmount_zfs() + except (paramiko.ssh_exception.SSHException, paramiko.ssh_exception.NoValidConnectionsError,) as e: + logging.debug(e) diff --git a/src/Manager/Manager_NetBSD.py b/src/Manager/Manager_NetBSD.py new file mode 100644 index 0000000..9142964 --- /dev/null +++ b/src/Manager/Manager_NetBSD.py @@ -0,0 +1,87 @@ +import logging +import re + +import paramiko + + +class NetBSD: + def __init__(self, rfile, mount_at, vm_object): + logging.basicConfig(level=logging.DEBUG) + self.bdev = None + self.fs_type = None + self.rfile = rfile + self.mount_at = mount_at + self.vm_object = vm_object + self.pool = None + + def make_block_device(self): + cmd = "/usr/sbin/vndconfig vnd0 {}".format(self.rfile) + self.vm_object.exec_cmd_quiet(cmd) + self.bdev = "/dev/vnd0" + cmd_disklabel = "/sbin/disklabel {}".format(self.bdev) + self.vm_object.exec_cmd_quiet(cmd_disklabel) + self.bdev = "/dev/rvnd0" + logging.debug("block device {} created".format(self.bdev)) + + def destroy_block_device(self): + cmd = "/usr/sbin/vndconfig -u {}".format(self.bdev.split("/")[-1]) + logging.debug(cmd) + return self.vm_object.exec_cmd_quiet(cmd) + + def _determine_fs_type(self): + if self.vm_object.silent_vm_state(): + file_output = self.vm_object.exec_cmd_quiet("/usr/bin/file {}".format(self.rfile)) + match = re.search(r"ext[1-4] filesystem data", file_output) + if match: + self.fs_type = match.group(0).split()[0] + elif "Unix Fast File system" in file_output or "4.3bsd" in file_output: + self.fs_type = "ufs" + + def _clean_mount_dir(self): + self.vm_object.rm_files(self.mount_at) + self.vm_object.mkdir(self.mount_at) + + def _get_mount_switch(self): + flag = "" + self.bdev = self.bdev.translate({ord(c): None for c in "r"}) + if self.fs_type == "ext2": + flag = "ext2fs" + elif "ufs" in self.fs_type: + flag = "ufs" + return flag + + def _mount_ext_ufs(self): + cmd = "/sbin/mount -t {} {} {}".format(self._get_mount_switch(), self.bdev, self.mount_at) + logging.debug(cmd) + if not self.vm_object.exec_cmd_quiet(cmd): + return 1 # Success + else: + logging.debug("Mounting of {} failed".format(self.bdev)) # Failed + return 0 + + def mount_file_system(self): + self._clean_mount_dir() + self._determine_fs_type() + self.make_block_device() + cmd_mount = "/sbin/mount -t {} {} {}".format(self._get_mount_switch(), self.bdev, self.mount_at) + logging.debug(cmd_mount) + if not self.vm_object.exec_cmd_quiet(cmd_mount): + return 1 + else: + logging.debug("Mounting of {} failed".format(self.bdev)) # Failed + return 0 + + def _unmount_ext_ufs(self): + cmd_mount = "/sbin/umount -f {}".format(self.mount_at) + logging.debug(cmd_mount) + if not self.vm_object.exec_cmd_quiet(cmd_mount) and not self.destroy_block_device(): + return 1 # Success + else: + logging.debug("Failed to properly umount {}".format(self.mount_at)) + return 0 + + def unmount_file_system(self): + try: + self._unmount_ext_ufs() + except (paramiko.ssh_exception.SSHException, paramiko.ssh_exception.NoValidConnectionsError,) as e: + logging.debug(e) diff --git a/src/Manager/Manager_OpenBSD.py b/src/Manager/Manager_OpenBSD.py new file mode 100644 index 0000000..5de906f --- /dev/null +++ b/src/Manager/Manager_OpenBSD.py @@ -0,0 +1,93 @@ +import logging +import re + +import paramiko + + +class OpenBSD: + def __init__(self, rfile, mount_at, vm_object): + logging.basicConfig(level=logging.DEBUG) + self.bdev = None + self.fs_type = None + self.rfile = rfile + self.mount_at = mount_at + self.vm_object = vm_object + self.pool = None + + def make_block_device(self): + cmd = "/sbin/vnconfig vnd0 {}".format(self.rfile) + self.vm_object.exec_cmd_quiet(cmd) + self.bdev = "vnd0" + cmd_disklabel = "/sbin/disklabel -A {}".format(self.bdev) + self.bdev = ( + self.vm_object.exec_cmd_quiet(cmd_disklabel) + .split("\n")[0] + .replace("# ", "") + .replace("r", "") + .replace(":", "") + .strip() + ) + logging.debug("block device {} created".format(self.bdev)) + + def destroy_block_device(self): + cmd = "/sbin/vnconfig -u {}".format(self.bdev) + logging.debug(cmd) + return self.vm_object.exec_cmd_quiet(cmd) + + def _determine_fs_type(self): + if self.vm_object.silent_vm_state(): + file_output = self.vm_object.exec_cmd_quiet("/usr/bin/file {}".format(self.rfile)) + match = re.search(r"ext[1-4] filesystem data", file_output) + if match: + self.fs_type = match.group(0).split()[0] + elif "Unix Fast File system" in file_output or "4.3bsd" in file_output: + self.fs_type = "ufs" + + def _clean_mount_dir(self): + self.vm_object.rm_files(self.mount_at) + self.vm_object.mkdir(self.mount_at) + + def _get_mount_switch(self): + flag = "" + self.bdev = self.bdev.translate({ord(c): None for c in "r"}) + if self.fs_type == "ext2": + flag = "ext2fs" + elif "ufs" in self.fs_type: + flag = "ffs" + return flag + + def _mount_ext_ufs(self): + cmd = "/sbin/mount -t {} {} {}".format(self._get_mount_switch(), self.bdev, self.mount_at) + logging.debug(cmd) + if not self.vm_object.exec_cmd_quiet(cmd): + return 1 # Success + else: + logging.debug("Mounting of {} failed".format(self.bdev)) # Failed + return 0 + + def mount_file_system(self): + self._clean_mount_dir() + self._determine_fs_type() + self.make_block_device() + cmd_mount = "/sbin/mount -t {} {} {}".format(self._get_mount_switch(), self.bdev, self.mount_at) + logging.debug(cmd_mount) + if not self.vm_object.exec_cmd_quiet(cmd_mount): + return 1 + else: + logging.debug("Mounting of {} failed".format(self.bdev)) # Failed + return 0 + + def _unmount_ext_ufs(self): + cmd_mount = "/sbin/umount -f {}".format(self.mount_at) + logging.debug(cmd_mount) + if not self.vm_object.exec_cmd_quiet(cmd_mount) and not self.destroy_block_device(): + return 1 # Success + else: + logging.debug("Failed to properly umount {}".format(self.mount_at)) + return 0 + + def unmount_file_system(self): + try: + self._unmount_ext_ufs() + except (paramiko.ssh_exception.SSHException, paramiko.ssh_exception.NoValidConnectionsError,) as e: + logging.debug(e) diff --git a/src/Manager/Manager_Ubuntu.py b/src/Manager/Manager_Ubuntu.py new file mode 100644 index 0000000..4d0f0a6 --- /dev/null +++ b/src/Manager/Manager_Ubuntu.py @@ -0,0 +1,86 @@ +import logging +import re + +import paramiko + + +class Ubuntu: + def __init__(self, rfile, mount_at, vm_object): + logging.basicConfig(level=logging.DEBUG) + self.bdev = None + self.fs_type = None + self.rfile = rfile + self.mount_at = mount_at + self.vm_object = vm_object + + def make_block_device(self): + cmd_find_loopdev = "losetup -f" + self.bdev = self.vm_object.exec_cmd_quiet(cmd_find_loopdev) + cmd = "losetup {} {}".format(self.bdev, self.rfile) + self.vm_object.exec_cmd_quiet(cmd) + logging.debug("block device {} created".format(self.bdev)) + + def destroy_block_device(self): + cmd = "losetup -d {}".format(self.bdev) + logging.debug(cmd) + return self.vm_object.exec_cmd_quiet(cmd) + + def _determine_fs_type(self): + if self.vm_object.silent_vm_state(): + file_output = self.vm_object.exec_cmd_quiet("/usr/bin/file {}".format(self.rfile)) + match = re.search(r"ext[1-4] filesystem data", file_output) + if match: + self.fs_type = match.group(0).split()[0] + + def _clean_mount_dir(self): + self.vm_object.rm_files(self.mount_at) + self.vm_object.mkdir(self.mount_at) + + def _get_mount_switch(self): + if any(x == self.fs_type for x in ["ext2", "ext3", "ext4"]): + flag = self.fs_type + else: + logging.debug("Malformed file system") + logging.debug('Trying mount -t "auto" ...') + flag = "auto" + return flag + + def _mount_ext(self): + cmd = '/bin/mount -t "{}" {} {}'.format(self._get_mount_switch(), self.bdev, self.mount_at) + logging.debug(cmd) + if not self.vm_object.exec_cmd_quiet(cmd): + return 1 # Success + else: + logging.debug("Mounting of {} failed".format(self.bdev)) # Failed + return 0 + + def mount_file_system(self): + try: + self._clean_mount_dir() + self._determine_fs_type() + self.make_block_device() + if any(mime in self.fs_type for mime in ["ext2", "ext3", "ext4", "ufs"]) and self._mount_ext(): + return 1 + else: + if self.vm_object.silent_vm_state(): + return 0 + else: + return 2 + except TypeError: + return None + + def _unmount_ext_ufs(self): + cmd_mount = "/bin/umount -f {}".format(self.mount_at) + logging.debug(cmd_mount) + if not self.vm_object.exec_cmd_quiet(cmd_mount) and not self.destroy_block_device(): + return 1 # Success + else: + logging.debug("Failed to properly umount {}".format(self.mount_at)) + return 0 + + def unmount_file_system(self): + try: + if any(ext in self.fs_type for ext in ["ext2", "ext3", "ext4"]): + return self._unmount_ext_ufs() + except (paramiko.ssh_exception.SSHException, paramiko.ssh_exception.NoValidConnectionsError,) as e: + logging.debug(e) diff --git a/src/Manager/__init__.py b/src/Manager/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/README.md b/src/README.md new file mode 100644 index 0000000..c3dfa77 --- /dev/null +++ b/src/README.md @@ -0,0 +1,196 @@ +# makeFS + +This script produces a valid ext2/ext3/ext4/ufs/zfs filesystem of size 'X'. +Naming can be specified, otherwise a random UID is created. +It also can be populated with with 'N' files of max size 'M' if specified. +This includes, files made from `/dev/urandom`, directories, sym- and hardlinks. +The file and directory structure is created at random. + +e.g.: `python3 makeFS2.py -fs "ext2" -n "ext20MB" -s 20 -p 15 -ps 1000` + +# VmManager +This script is able to install and manage multiple VMs via libvirt and its python bindings + +## VM Setup and Install: +It's expected to create an instance of VMManager first: +``` +vmm = VMMANAGER() +``` + +You can tweak hardware details of your VM by calling `setup()`: +``` +@param name= Name for the VM +@param vm_memory= RAM in MB. Default=4096 +@param vm_cpus= #CPU_CORES. Default=2 +@param vm_hdd= HDD size in GB. Default=10 +vmm.setup(name='', vm_memory=, vm_cpus=, vm_hdd=) + +``` + +#### Install VM from local .ISO +``` +@param iso= Path to the .iso image file +vmm.install_vm(iso='') +``` + +#### Install VM from web .ISO: +``` +@param url_iso= URL from where to wget the .iso image +@param save_dl_to= Path on the local disk. Default='/tmp' +vmm.install_vm(url_iso='', save_dl_to='') +``` + +#### Install VM from zipped web .ISO: +``` +@param url_zip= URL from where to wget the .iso.xz image +@param save_dl_to= Path on the local disk. Default='/tmp' +@param save_unpckd_to= Path on the local disk. Default='/tmp' +@param save_unpckd_as= Filename for the unpacked .iso. Default=Tries to use Archive name without extension +vmm.install_vm(url_zip='', + save_dl_to='', + save_unpckd_to='', + save_unpckd_as='') +``` + + + +#### Boot directly from a QCOW2 VM hdd +##### 1. If fetching QCOW from web: +``` +@param name= Name for the VM +@param vm_type= A fitting representation of the image from 'qemu-system-XXX' +@param url= URL from where to wget the .qcow2 image +@param save_dl_to= Path on the local disk to save download to. Default='/tmp' +@param save_dl_as= Filename for download. Default=Tries to use Archive name without extension +@param port= Port for port forwarding between Host<->Guest. Default=22 +vmm.setup(name='', vm_type='', url='', save_url_cntnt_to='', save_url_cntnt_as='', fwdPort=) +vmm.get_img() +machine = vmm.qemu_boot_qcow() +``` + +If the QCOW is zipped as .xz you can call `vmm.unpack()` prior to `vmm.run_qemu()`. +`vmm.unpack()` + + +##### 2. If QCOW already on disk: +``` +@param name= Name for the VM +@param vm_type= A fitting representation of the image from 'qemu-system-XXX' +@param unpckd_url_cntnt= Path to and including the local .qcow2 image +@param port= Port for port forwarding between Host<->Guest. Default=22 +vmm.setup(name='', vm_type='', unpckd_url_cntnt='', port=) +machine = vmm.qemu_boot_qcow() +``` + + + +## VM user interaction: +Note: relative paths should always be resolved automatically + +#### Copy files to guest: +``` +@param lfile= Path to a file on the host system +@param path_on_guest= Path (dir!) on the guest to save the lfile to +vmm.cp_files_to_guest(lfile='', path_on_guest='') +``` +If path does not exist the path gets created + +#### Copy files to host: +``` +@param rfile= Path to a file on the guest system +@param path_on_host= Path (dir!) on the guest to save the lfile to +@param filename= Name for the file on the host system +vmm.cp_files_to_host(rfile='', path_on_host='', filename='') +``` + +#### Tar n files on guest: +Tars the files given in `lst_of_files` in `PATH_REMOTE_DIR` on guest +``` +@param rpath= The parent directory on where the files are located +@param archive_name= Name for the archive +@param lst_of_files= List of files @ location rpath +rpath = vmm.qemu_exec_tar_files(rpath='', archive_name='', lst_of_files=['', '', ..., '']) +``` + +#### Tar a dir on guest: +Tars the whole dir specified +``` +@param rpath= The parent directory on where the files are located +@param archive_name= Name for the archive +rpath = vm_exec_tar_dir(rpath='', archive_name='') +``` + +#### Exec any cmd on guest from cmdline: +``` +Executes the CMD given on the commandline on the guest system +vmm.vm_exec_cmd(CMD) +``` + +#### Exec makedir on guest: +``` +Creates a directory including all necessary parents supplied +vmm.vm_exec_mkdir(PATH) +``` + +#### Exec remove on guest: +``` +Does a recursive remove to be able to handle directory and single files +vmm.vm_exec_rm(PATH) +``` + +#### Get latest crash from guests `/var/crash/:` +``` +@param lpath= Path on the host system to save the `latest_crash.tar` archive to +vmm.fetch_latest_crash(lpath=) +``` + +#### Get latest unknown crash from guests `/var/crash/`: +``` +@param lpath= Path on the host system to save the `latest_unknown_crash.tar` archive to +vmm.fetch_latest_unknown_crash(lpath=) +``` + +#### Get all crashes from guests `/var/crash/`: +``` +@param lpath= Path on the host system to save the `allcrashes.tar` archive to +vmm.fetch_all_crashes(lpath=LOCAL_PATH_WHERE_TO_SAVE) +``` + +## VM Management + +On top of providing the above user interface to the VM for interaction several management convenience functions were added too. + +#### Boot VMs +This will list the the installed/found VMs managed by libvirt and prompts the user for a box to start + +* `vmm.boot_vm()` + +#### Manage VMs +All the functions below take an optional `vm_name=` argument for convenient management of other existing VMs. +* `vmm.shutdown_vm()` +* `vmm.suspend_vm()` +* `vmm.resume_vm()` +* `vmm.reset_vm()` +* `vmm.force_stop_vm()` +* `vmm.delete_vm()` +* `vmm.check_vm_state()` +* `vmm.quick_boot()` +* `vmm.reboot_vm_if_crashed()` +* `vmm.reset_vm_if_crashed()` +* `vmm.restore_latest_snap_if_crashed()` + +#### Snapshots + +Furthermore a snapshot interface was added. These can take the same `vm_name` optional argument as well. + +* `vmm.create_snapshot()` +* `vmm.create_snapshot_as(snapshot_name)` +* `vmm.delete_snapshot(snapshot_name)` +* `vmm.restore_snapshot(snapshot_name)` +* `vmm.get_current_snapshot()` + +#### Others + +* `vmm.create_core_dump()` +* `vmm.take_screenshot()` +* `vmm.check_vm_state()` diff --git a/src/Requirements.sh b/src/Requirements.sh new file mode 100755 index 0000000..4763f25 --- /dev/null +++ b/src/Requirements.sh @@ -0,0 +1,56 @@ +#!/bin/bash +set -e + +echo "[*] Installing system dependencies..." +sudo apt-get install -y python3-dev python3-pip qemu-kvm libvirt-clients libvirt-dev libvirt-daemon-system gcc \ + libsdl1.2-dev zlib1g-dev libasound2-dev linux-kernel-headers pkg-config libgnutls28-dev \ + libpci-dev libglib2.0-dev libfdt-dev libpixman-1-dev net-tools virtinst git libnl-3-dev \ + libnl-route-3-dev libxml2-dev libpciaccess-dev libyajl-dev xsltproc libdevmapper-dev \ + uuid-dev qemu qemu-block-extra qemu-guest-agent qemu-system qemu-system-common libvirt-bin \ + qemu-utils qemu-user qemu-efi openbios-ppc sgabios systemtap pm-utils open-iscsi debootstrap \ + zfsutils-linux file tmux + + +mkdir -p ~/git + +echo "[*] Installing radamsa" +git clone https://gitlab.com/akihe/radamsa.git ~/git/radamsa/ +cd ~/git/radamsa +make +sudo make install + +echo "[*] Installing needed python packages..." +sudo -EH python3 -m pip install libvirt-python wget paramiko pprint scp python-magic Pillow colorama seaborn + +echo "[*] Setting up users..." +sudo usermod -aG libvirt $USER +sudo usermod -aG libvirt-qemu $USER +sudo usermod -aG kvm $USER + +echo "[*] Testing install..." +sudo systemctl enable libvirtd +sudo systemctl start libvirtd +virsh list --all >> /dev/null +if [[ $? == 0 ]]; then + echo "[+] libvirt successfully set up!" +else + echo "[-] libvirt failed to install!" +fi + +kvm-ok >> /dev/null +if [[ $? == 0 ]]; then + echo "[+] kvm support successfully set up!" + cpu_check=$(cat /proc/cpuinfo | grep "model name" | uniq | grep -oh ": [a-zA-Z]*" | cut -c 3-) + if [[ ${cpu_check} == "Intel" ]]; then + modprobe kvm_intel + elif [[ ${cpu_check} == "AMD" ]]; then + modprobe kvm_amd + else + echo "[*] Unknown CPU, skipping modprobe" + fi +else + echo "[-] kvm support failed to install!" +fi + +installed_qemu_packages=$(dpkg -l | grep '^ii' | grep -o ' qemu-[a-zA-Z0-9-]*') +echo "[*] Installed QEMU modules:"${installed_qemu_packages} diff --git a/src/SnapshotTemplate/__init__.py b/src/SnapshotTemplate/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/SnapshotTemplate/snapshot.py b/src/SnapshotTemplate/snapshot.py new file mode 100644 index 0000000..818eafa --- /dev/null +++ b/src/SnapshotTemplate/snapshot.py @@ -0,0 +1,9 @@ +xml_head_name = """ {} + running + """ + +xml_head = """ + running + """ + +xml_tail = "" diff --git a/src/UserEmulation/UE_FreeBSD.py b/src/UserEmulation/UE_FreeBSD.py new file mode 100644 index 0000000..6df2c9d --- /dev/null +++ b/src/UserEmulation/UE_FreeBSD.py @@ -0,0 +1,156 @@ +import os +import random + +from UserEmulation.UE_Generic import GenericUserEmulation + + +def get_random_list_entry(file_list): + return random.choice(list(filter(None, file_list))).rstrip(",").strip() + + +class FreebsdUserEmulation: + def __init__(self, vm_object, rpath): + self.vm_object = vm_object + self.rpath = rpath + + def prepare_freebsd_user_emulation(self): + gen_user = GenericUserEmulation(vm_object=self.vm_object, remote_mount_path=self.rpath) + users, groups = gen_user.get_users_and_groups_of_target_os() + chflags_modes = [ + "arch", + "nodump", + "opaque", + "sappnd", + "schg", + "snapshot", + "sunlnk", + "uappnd", + "uarch", + "uchg", + "hidden", + ] + # hardcoded path should probably be replaced with "$(which CMD) flags flag_args" + free_bsd_user_emulation = [ + "/usr/bin/find {}/*".format(self.rpath), # yes + "/bin/ls -lah {}/*".format(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="dir"))), # yes + "/usr/bin/touch {}".format( + os.path.join(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="dir")), "TOUCHED",) + ), # no + "/bin/mkdir -p {}/a/b/c".format(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="dir"))), # no + "/bin/dd if=/dev/urandom of={} bs={} count={}".format( + os.path.join(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="dir")), "DATA",), + 1 << 20, + random.randint(1, 5), + ), # yes + "/bin/ln {} {}".format( + get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="file")), + os.path.join(self.rpath, "HARDLINK"), + ), # no + "/bin/ln -s {} {}".format( + get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="file")), + os.path.join(self.rpath, "SOFTLINK"), + ), # no + "/usr/bin/file {}".format(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="files"))), # yes + "/usr/bin/readlink {}".format(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="link"))), # yes + "/usr/bin/stat {}".format(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="dir"))), # yes + "/bin/cp -R {} {}/COPIED", # no + "/sbin/mknod {}".format( + os.path.join(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="dir")), "NODDED",) + ), # no + '/usr/bin/tar -jcvf {} "{} {}"'.format( + os.path.join(self.rpath, "archive.bzip2"), + get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="file")), + get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="file")), + ), # yes + "/bin/chmod {} {}".format( + gen_user.get_random_chmod_mode(), get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="files")), + ), # no + "/usr/sbin/chown {}:{} {}".format( + get_random_list_entry(users), + get_random_list_entry(groups), + get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="files")), + ), # no + "/usr/bin/chgrp {} {}".format( + get_random_list_entry(groups), get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="files")), + ), # no + "/bin/mv {} {}", # no + "/bin/echo APPENDED >> {}".format( + get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="file")) + ), # no + "chdir {}".format(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="dir"))), # no + "/bin/rm -rf {}".format(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="dir")[:-1])), # no + "/bin/chflags {} {}".format( + get_random_list_entry(chflags_modes), + get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="files")), + ), # no + "/bin/getfacl {}".format(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="files"))), # yes + "/usr/bin/split {} {}".format( + get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="files")), + get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="dir")), + ), + "/usr/bin/du {}".format(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="files"))), + "/usr/bin/wc {}".format(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="files"))), + "/usr/bin/truncate -s {} {}".format( + random.randint(1, 5), get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="file")), + ), + "/usr/bin/dirname {}".format(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="files"))), + "/usr/bin/basename {}".format(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="files"))), + ] + # '/bin/setfacl -m {}:{} {}'.format(get_random_list_entry(users), + # gen_user.get_random_chmod_mode(), + # get_random_list_entry( + # gen_user.get_files_of_mounted_file_system( + # param='files'))) + # ] needs to be explicitly enabled during mount -o acls + random.shuffle(free_bsd_user_emulation) + return free_bsd_user_emulation + + def get_freebsd_backup_user_emulation(self): + gen_user = GenericUserEmulation(vm_object=self.vm_object, remote_mount_path=self.rpath) + + freebsd_user_emulation = [ + "/usr/bin/find {}/*".format(self.rpath), + "/bin/ls -lah {}/*".format(self.rpath), + "/usr/bin/touch {}".format(os.path.join(self.rpath, "TOUCHED")), + "/bin/mkdir -p {}/a/b/c".format(self.rpath), + "/bin/dd if=/dev/urandom of={} bs={} count={}".format( + os.path.join(self.rpath, "DATA"), 1 << 20, random.randint(1, 5) + ), + "/sbin/mknod {}".format(os.path.join(self.rpath, "NODDED")), + "/bin/echo APPENDED >> {}".format(os.path.join(self.rpath, "ECHOED")), + ] + random.shuffle(freebsd_user_emulation) + for entry in [ + "/bin/ln {} {}".format(os.path.join(self.rpath, "DATA"), "HARDLINK"), + "/bin/ln -s {} {}".format(os.path.join(self.rpath, "DATA"), "SOFTLINK"), + "/usr/bin/readlink {}".format(os.path.join(self.rpath, get_random_list_entry(["SOFTLINK", "HARDLINK"]))), + "/bin/chmod {} {}".format(gen_user.get_random_chmod_mode(), os.path.join(self.rpath, "DATA")), + "/bin/rm -rf {}/*".format(self.rpath), + ]: + freebsd_user_emulation.append(entry) + return freebsd_user_emulation + + def set_freebsd_user_emulation(self): + try: + gen_user = GenericUserEmulation(vm_object=self.vm_object, remote_mount_path=self.rpath) + res = gen_user.get_files_of_mounted_file_system("files") + if any("Traceback" in pos for pos in res): + user_emulation_command_list = self._failed_trav_user_emul() + else: + user_emulation_command_list = self.prepare_freebsd_user_emulation() + except AttributeError: + user_emulation_command_list = self._failed_trav_user_emul() + return user_emulation_command_list + + def _failed_trav_user_emul(self): + print("\t > Failed to perform a file traversal on mounted file system") + print("\t > Starting backup user emulation that only attempts to write to disk...") + user_emulation_command_list = self.get_freebsd_backup_user_emulation() + return user_emulation_command_list + + @staticmethod + def randomize_emulation_list_length(emu_list, multiplier): + new_emu_list = [] + for i in range(multiplier): + new_emu_list += random.sample(emu_list, random.randint(0, len(emu_list))) + return new_emu_list diff --git a/src/UserEmulation/UE_Generic.py b/src/UserEmulation/UE_Generic.py new file mode 100644 index 0000000..0f0e081 --- /dev/null +++ b/src/UserEmulation/UE_Generic.py @@ -0,0 +1,36 @@ +import random + + +class GenericUserEmulation: + def __init__(self, vm_object, remote_mount_path): + self.vm_object = vm_object + self.rpath = remote_mount_path + + def get_users_and_groups_of_target_os(self): + res = self.vm_object.exec_cmd_quiet("python3 /tmp/get_users_and_groups.py").split("") + users = res[0].split() + groups = res[1].split() + return users, groups + + def get_files_of_mounted_file_system(self, param="all"): + res = self.vm_object.exec_cmd_quiet("python3 /tmp/file_traversal.py {} {}".format(self.rpath, param)).split("") + if param == "all": + list_of_all_directories = res[0].split() + list_of_all_files = res[1].split() + list_of_files_and_links = res[2].split() + list_of_all_links = res[3].split() + return ( + list_of_all_directories, + list_of_all_files, + list_of_files_and_links, + list_of_all_links, + ) + else: + return res[0].split(",") + + @staticmethod + def get_random_chmod_mode(): + mod = "" + for i in range(3): + mod += str(random.randint(0, 7)) + return int(mod) diff --git a/src/UserEmulation/UE_NetBSD.py b/src/UserEmulation/UE_NetBSD.py new file mode 100644 index 0000000..f273c22 --- /dev/null +++ b/src/UserEmulation/UE_NetBSD.py @@ -0,0 +1,143 @@ +import os +import random + +from UserEmulation.UE_Generic import GenericUserEmulation + + +def get_random_list_entry(file_list): + return random.choice(list(filter(None, file_list))).rstrip(",").strip() + + +class NetbsdUserEmulation: + def __init__(self, vm_object, rpath): + self.vm_object = vm_object + self.rpath = rpath + + def prepare_netbsd_user_emulation(self): + gen_user = GenericUserEmulation(vm_object=self.vm_object, remote_mount_path=self.rpath) + users, groups = gen_user.get_users_and_groups_of_target_os() + chflags_modes = [ + "arch", + "nodump", + "opaque", + "sappnd", + "schg", + "snapshot", + "sunlnk", + "uappnd", + "uarch", + "uchg", + "hidden", + ] + + netbsd_user_emulation = [ + "/usr/bin/find {}/*".format(self.rpath), + "/bin/ls -lah {}/*".format(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="dir"))), + "/usr/bin/touch {}".format( + os.path.join(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="dir")), "TOUCHED",) + ), + "/bin/mkdir -p {}/a/b/c".format(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="dir"))), + "/bin/dd if=/dev/urandom of={} bs={} count={}".format( + os.path.join(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="dir")), "DATA",), + 1 << 20, + random.randint(1, 5), + ), + "/bin/ln {} {}".format( + get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="file")), + os.path.join(self.rpath, "HARDLINK"), + ), + "/bin/ln -s {} {}".format( + get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="file")), + os.path.join(self.rpath, "SOFTLINK"), + ), + "/usr/bin/file {}".format(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="files"))), + "/usr/bin/readlink {}".format(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="link"))), + "/usr/bin/stat {}".format(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="dir"))), + "/bin/cp -R {} {}/COPIED", # no + "/sbin/mknod {}".format( + os.path.join(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="dir")), "NODDED",) + ), # no + '/bin/tar -jcvf {} "{} {}"'.format( + os.path.join(self.rpath, "archive.bzip2"), + get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="file")), + get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="file")), + ), + "/bin/chmod {} {}".format( + gen_user.get_random_chmod_mode(), get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="files")), + ), + "/sbin/chown {}:{} {}".format( + get_random_list_entry(users), + get_random_list_entry(groups), + get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="files")), + ), + "/bin/chgrp {} {}".format( + get_random_list_entry(groups), get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="files")), + ), + "/bin/mv {} {}", + "/bin/echo APPENDED >> {}".format(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="file"))), + "/bin/rm -rf {}".format(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="dir")[:-1])), + "/usr/bin/chflags {} {}".format( + get_random_list_entry(chflags_modes), + get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="files")), + ), + "/usr/bin/split {} {}".format( + get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="files")), + get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="dir")), + ), + "/usr/bin/du {}".format(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="files"))), + "/usr/bin/wc {}".format(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="files"))), + "/usr/bin/dirname {}".format(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="files"))), + "/usr/bin/basename {}".format(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="files"))), + ] + random.shuffle(netbsd_user_emulation) + return netbsd_user_emulation + + def get_netbsd_backup_user_emulation(self): + gen_user = GenericUserEmulation(vm_object=self.vm_object, remote_mount_path=self.rpath) + + netbsd_user_emulation = [ + "/usr/bin/find {}/*".format(self.rpath), + "/bin/ls -lah {}/*".format(self.rpath), + "/usr/bin/touch {}".format(os.path.join(self.rpath, "TOUCHED")), + "/bin/mkdir -p {}/a/b/c".format(self.rpath), + "/bin/dd if=/dev/urandom of={} bs={} count={}".format( + os.path.join(self.rpath, "DATA"), 1 << 20, random.randint(1, 5) + ), + "/sbin/mknod {}".format(os.path.join(self.rpath, "NODDED")), + "/bin/echo APPENDED >> {}".format(os.path.join(self.rpath, "ECHOED")), + ] + random.shuffle(netbsd_user_emulation) + for entry in [ + "/bin/ln {} {}".format(os.path.join(self.rpath, "DATA"), "HARDLINK"), + "/bin/ln -s {} {}".format(os.path.join(self.rpath, "DATA"), "SOFTLINK"), + "/usr/bin/readlink {}".format(os.path.join(self.rpath, get_random_list_entry(["SOFTLINK", "HARDLINK"]))), + "/bin/chmod {} {}".format(gen_user.get_random_chmod_mode(), os.path.join(self.rpath, "DATA")), + "/bin/rm -rf {}/*".format(self.rpath), + ]: + netbsd_user_emulation.append(entry) + return netbsd_user_emulation + + def set_netbsd_user_emulation(self): + try: + gen_user = GenericUserEmulation(vm_object=self.vm_object, remote_mount_path=self.rpath) + res = gen_user.get_files_of_mounted_file_system("files") + if any("Traceback" in pos for pos in res): + user_emulation_command_list = self._failed_trav_user_emul() + else: + user_emulation_command_list = self.prepare_netbsd_user_emulation() + except AttributeError: + user_emulation_command_list = self._failed_trav_user_emul() + return user_emulation_command_list + + def _failed_trav_user_emul(self): + print("\t > Failed to perform a file traversal on mounted file system") + print("\t > Starting backup user emulation that only attempts to write to disk...") + user_emulation_command_list = self.get_netbsd_backup_user_emulation() + return user_emulation_command_list + + @staticmethod + def randomize_emulation_list_length(emu_list, multiplier): + new_emu_list = [] + for i in range(multiplier): + new_emu_list += random.sample(emu_list, random.randint(0, len(emu_list))) + return new_emu_list diff --git a/src/UserEmulation/UE_OpenBSD.py b/src/UserEmulation/UE_OpenBSD.py new file mode 100644 index 0000000..892d0f2 --- /dev/null +++ b/src/UserEmulation/UE_OpenBSD.py @@ -0,0 +1,143 @@ +import os +import random + +from UserEmulation.UE_Generic import GenericUserEmulation + + +def get_random_list_entry(file_list): + return random.choice(list(filter(None, file_list))).rstrip(",").strip() + + +class OpenbsdUserEmulation: + def __init__(self, vm_object, rpath): + self.vm_object = vm_object + self.rpath = rpath + + def prepare_openbsd_user_emulation(self): + gen_user = GenericUserEmulation(vm_object=self.vm_object, remote_mount_path=self.rpath) + users, groups = gen_user.get_users_and_groups_of_target_os() + chflags_modes = [ + "arch", + "nodump", + "opaque", + "sappnd", + "schg", + "snapshot", + "sunlnk", + "uappnd", + "uarch", + "uchg", + "hidden", + ] + + openbsd_user_emulation = [ + "/usr/bin/find {}/*".format(self.rpath), + "/bin/ls -lah {}/*".format(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="dir"))), + "/usr/bin/touch {}".format( + os.path.join(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="dir")), "TOUCHED",) + ), + "/bin/mkdir -p {}/a/b/c".format(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="dir"))), + "/bin/dd if=/dev/urandom of={} bs={} count={}".format( + os.path.join(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="dir")), "DATA",), + 1 << 20, + random.randint(1, 5), + ), + "/bin/ln {} {}".format( + get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="file")), + os.path.join(self.rpath, "HARDLINK"), + ), + "/bin/ln -s {} {}".format( + get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="file")), + os.path.join(self.rpath, "SOFTLINK"), + ), + "/usr/bin/file {}".format(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="files"))), + "/usr/bin/readlink {}".format(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="link"))), + "/usr/bin/stat {}".format(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="dir"))), + "/bin/cp -R {} {}/COPIED", # no + "/sbin/mknod {}".format( + os.path.join(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="dir")), "NODDED",) + ), # no + '/bin/tar -jcvf {} "{} {}"'.format( + os.path.join(self.rpath, "archive.bzip2"), + get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="file")), + get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="file")), + ), + "/bin/chmod {} {}".format( + gen_user.get_random_chmod_mode(), get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="files")), + ), + "/sbin/chown {}:{} {}".format( + get_random_list_entry(users), + get_random_list_entry(groups), + get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="files")), + ), + "/usr/sbin/chgrp {} {}".format( + get_random_list_entry(groups), get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="files")), + ), + "/bin/mv {} {}", + "/bin/echo APPENDED >> {}".format(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="file"))), + "/bin/rm -rf {}".format(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="dir")[:-1])), + "/usr/bin/chflags {} {}".format( + get_random_list_entry(chflags_modes), + get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="files")), + ), + "/usr/bin/split {} {}".format( + get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="files")), + get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="dir")), + ), + "/usr/bin/du {}".format(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="files"))), + "/usr/bin/wc {}".format(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="files"))), + "/usr/bin/dirname {}".format(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="files"))), + "/usr/bin/basename {}".format(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="files"))), + ] + random.shuffle(openbsd_user_emulation) + return openbsd_user_emulation + + def get_openbsd_backup_user_emulation(self): + gen_user = GenericUserEmulation(vm_object=self.vm_object, remote_mount_path=self.rpath) + + openbsd_user_emulation = [ + "/usr/bin/find {}/*".format(self.rpath), + "/bin/ls -lah {}/*".format(self.rpath), + "/usr/bin/touch {}".format(os.path.join(self.rpath, "TOUCHED")), + "/bin/mkdir -p {}/a/b/c".format(self.rpath), + "/bin/dd if=/dev/urandom of={} bs={} count={}".format( + os.path.join(self.rpath, "DATA"), 1 << 20, random.randint(1, 5) + ), + "/sbin/mknod {}".format(os.path.join(self.rpath, "NODDED")), + "/bin/echo APPENDED >> {}".format(os.path.join(self.rpath, "ECHOED")), + ] + random.shuffle(openbsd_user_emulation) + for entry in [ + "/bin/ln {} {}".format(os.path.join(self.rpath, "DATA"), "HARDLINK"), + "/bin/ln -s {} {}".format(os.path.join(self.rpath, "DATA"), "SOFTLINK"), + "/usr/bin/readlink {}".format(os.path.join(self.rpath, get_random_list_entry(["SOFTLINK", "HARDLINK"]))), + "/bin/chmod {} {}".format(gen_user.get_random_chmod_mode(), os.path.join(self.rpath, "DATA")), + "/bin/rm -rf {}/*".format(self.rpath), + ]: + openbsd_user_emulation.append(entry) + return openbsd_user_emulation + + def set_openbsd_user_emulation(self): + try: + gen_user = GenericUserEmulation(vm_object=self.vm_object, remote_mount_path=self.rpath) + res = gen_user.get_files_of_mounted_file_system("files") + if any("Traceback" in pos for pos in res): + user_emulation_command_list = self._failed_trav_user_emul() + else: + user_emulation_command_list = self.prepare_openbsd_user_emulation() + except AttributeError: + user_emulation_command_list = self._failed_trav_user_emul() + return user_emulation_command_list + + def _failed_trav_user_emul(self): + print("\t > Failed to perform a file traversal on mounted file system") + print("\t > Starting backup user emulation that only attempts to write to disk...") + user_emulation_command_list = self.get_openbsd_backup_user_emulation() + return user_emulation_command_list + + @staticmethod + def randomize_emulation_list_length(emu_list, multiplier): + new_emu_list = [] + for i in range(multiplier): + new_emu_list += random.sample(emu_list, random.randint(0, len(emu_list))) + return new_emu_list diff --git a/src/UserEmulation/UE_Ubuntu.py b/src/UserEmulation/UE_Ubuntu.py new file mode 100644 index 0000000..6cbcf67 --- /dev/null +++ b/src/UserEmulation/UE_Ubuntu.py @@ -0,0 +1,136 @@ +import os +import random + +from UserEmulation.UE_Generic import GenericUserEmulation + + +def get_random_list_entry(file_list): + return random.choice(list(filter(None, file_list))).rstrip(",").strip() + + +class UbuntuUserEmulation: + def __init__(self, vm_object, rpath): + self.vm_object = vm_object + self.rapth = rpath + + def prepare_ubuntu_user_emulation(self): + gen_user = GenericUserEmulation(vm_object=self.vm_object, remote_mount_path=self.rapth) + users, groups = gen_user.get_users_and_groups_of_target_os() + # chflags_modes = ['arch', 'nodump', 'opaque', 'sappnd', 'schg', 'snapshot', + # 'sunlnk', 'uappnd', 'uarch', 'uchg', 'hidden'] + + ubuntu_user_emulation = [ + "/usr/bin/find {}/*".format(self.rapth), # yes + "/bin/ls -lah {}/*".format(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="dir"))), # yes + "/usr/bin/touch {}".format( + os.path.join(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="dir")), "TOUCHED",) + ), # no + "/bin/mkdir -p {}/a/b/c".format(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="dir"))), # no + "/bin/dd if=/dev/urandom of={} bs={} count={}".format( + os.path.join(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="dir")), "DATA",), + 1 << 20, + random.randint(1, 5), + ), # yes + "/bin/ln {} {}".format( + get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="file")), + os.path.join(self.rapth, "HARDLINK"), + ), # no + "/bin/ln -s {} {}".format( + get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="file")), + os.path.join(self.rapth, "SOFTLINK"), + ), # no + "/usr/bin/file {}".format(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="files"))), # yes + "/bin/readlink {}".format(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="link"))), # yes + "/usr/bin/stat {}".format(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="dir"))), # yes + "/bin/cp -R {} {}/COPIED", # no + "/bin/mknod {}".format( + os.path.join(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="dir")), "NODDED",) + ), # no + '/bin/tar -jcvf {} "{} {}"'.format( + os.path.join(self.rapth, "archive.bzip2"), + get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="file")), + get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="file")), + ), # yes + "/bin/chmod {} {}".format( + gen_user.get_random_chmod_mode(), get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="files")), + ), # no + "/bin/chown {}:{} {}".format( + get_random_list_entry(users), + get_random_list_entry(groups), + get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="files")), + ), # no + "/bin/chgrp {} {}".format( + get_random_list_entry(groups), get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="files")), + ), # no + "/bin/mv {} {}", # no + "/bin/echo APPENDED >> {}".format( + get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="file")) + ), # no + "chdir {}".format(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="dir"))), # no + "/bin/rm -rf {}".format(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="dir")[:-1])), # no + "/usr/bin/getfacl {}".format(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="files"))), # yes + "/usr/bin/split {} {}".format( + get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="files")), + get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="dir")), + ), + "/usr/bin/du {}".format(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="files"))), + "/usr/bin/wc {}".format(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="files"))), + "/usr/bin/truncate -s {} {}".format( + random.randint(1, 5), get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="file")), + ), + "/usr/bin/dirname {}".format(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="files"))), + "/usr/bin/basename {}".format(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="files"))), + ] + + random.shuffle(ubuntu_user_emulation) + return ubuntu_user_emulation + + def get_ubuntu_backup_user_emulation(self): + gen_user = GenericUserEmulation(vm_object=self.vm_object, remote_mount_path=self.rapth) + + ubuntu_user_emulation = [ + "/usr/bin/find {}/*".format(self.rapth), + "/bin/ls -lah {}/*".format(self.rapth), + "/usr/bin/touch {}".format(os.path.join(self.rapth, "TOUCHED")), + "/bin/mkdir -p {}/a/b/c".format(self.rapth), + "/bin/dd if=/dev/urandom of={} bs={} count={}".format( + os.path.join(self.rapth, "DATA"), 1 << 20, random.randint(1, 5) + ), + "/bin/mknod {}".format(os.path.join(self.rapth, "NODDED")), + "/bin/echo APPENDED >> {}".format(os.path.join(self.rapth, "ECHOED")), + ] + random.shuffle(ubuntu_user_emulation) + for entry in [ + "/bin/ln {} {}".format(os.path.join(self.rapth, "DATA"), "HARDLINK"), + "/bin/ln -s {} {}".format(os.path.join(self.rapth, "DATA"), "SOFTLINK"), + "/bin/readlink {}".format(os.path.join(self.rapth, get_random_list_entry(["SOFTLINK", "HARDLINK"]))), + "/bin/chmod {} {}".format(gen_user.get_random_chmod_mode(), os.path.join(self.rapth, "DATA")), + "/bin/rm -rf {}/*".format(self.rapth), + ]: + ubuntu_user_emulation.append(entry) + return ubuntu_user_emulation + + def set_ubuntu_user_emulation(self): + try: + gen_user = GenericUserEmulation(vm_object=self.vm_object, remote_mount_path=self.rapth) + res = gen_user.get_files_of_mounted_file_system("files") + if any("Traceback" in pos for pos in res): + user_emulation_command_list = self._failed_trav_user_emul() + else: + user_emulation_command_list = self.prepare_ubuntu_user_emulation() + except AttributeError: + user_emulation_command_list = self._failed_trav_user_emul() + return user_emulation_command_list + + def _failed_trav_user_emul(self): + print("\t > Failed to perform a file traversal on mounted file system") + print("\t > Starting backup user emulation that only attempts to write to disk...") + user_emulation_command_list = self.get_ubuntu_backup_user_emulation() + return user_emulation_command_list + + @staticmethod + def randomize_emulation_list_length(emu_list, multiplier): + new_emu_list = [] + for i in range(multiplier): + new_emu_list += random.sample(emu_list, random.randint(0, len(emu_list))) + return new_emu_list diff --git a/src/UserEmulation/UE_all.py b/src/UserEmulation/UE_all.py new file mode 100644 index 0000000..514b24a --- /dev/null +++ b/src/UserEmulation/UE_all.py @@ -0,0 +1,154 @@ +import os +import random + +from UserEmulation.UE_Generic import GenericUserEmulation + + +def get_random_list_entry(file_list): + return random.choice(list(filter(None, file_list))).rstrip(",").strip() + + +class UserEmulation: + def __init__(self, vm_object, rpath): + self.vm_object = vm_object + self.rpath = rpath + + def prepare_user_emulation(self): + gen_user = GenericUserEmulation(vm_object=self.vm_object, remote_mount_path=self.rpath) + users, groups = gen_user.get_users_and_groups_of_target_os() + chflags_modes = [ + "arch", + "nodump", + "opaque", + "sappnd", + "schg", + "snapshot", + "sunlnk", + "uappnd", + "uarch", + "uchg", + "hidden", + ] + + user_emulation = [ + "$(which find) {}/*".format(self.rpath), + "$(which ls) -lah {}/*".format(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="dir"))), + "$(which touch) {}".format( + os.path.join(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="dir")), "TOUCHED",) + ), + "$(which mkdir) -p {}/a/b/c".format(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="dir"))), + "$(which dd) if=/dev/urandom of={} bs={} count={}".format( + os.path.join(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="dir")), "DATA",), + 1 << 20, + random.randint(1, 5), + ), + "$(which ln) {} {}".format( + get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="file")), + os.path.join(self.rpath, "HARDLINK"), + ), + "$(which ln) -s {} {}".format( + get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="file")), + os.path.join(self.rpath, "SOFTLINK"), + ), + "$(which file) {}".format(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="files"))), + "$(which readlink) {}".format(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="link"))), + "$(which stat) {}".format(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="dir"))), + "$(which cp) -R {} {}/COPIED", + "$(which mknod) {}".format( + os.path.join(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="dir")), "NODDED",) + ), + '$(which tar) -jcvf {} "{} {}"'.format( + os.path.join(self.rpath, "archive.bzip2"), + get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="file")), + get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="file")), + ), + "$(which chmod) {} {}".format( + gen_user.get_random_chmod_mode(), get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="files")), + ), + "$(which chown) {}:{} {}".format( + get_random_list_entry(users), + get_random_list_entry(groups), + get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="files")), + ), + "$(which chgrp) {} {}".format( + get_random_list_entry(groups), get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="files")), + ), + "$(which mv) {} {}", + "$(which echo) APPENDED >> {}".format(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="file"))), + "$(which chdir) {}".format(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="dir"))), + "$(which rm) -rf {}".format(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="dir")[:-1])), + "$(which chflags) {} {}".format( + get_random_list_entry(chflags_modes), + get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="files")), + ), + "$(which getfacl) {}".format(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="files"))), + "$(which split) {} {}".format( + get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="files")), + get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="dir")), + ), + "$(which du) {}".format(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="files"))), + "$(which wc) {}".format(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="files"))), + "$(which truncate) -s {} {}".format( + random.randint(1, 5), get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="file")), + ), + "$(which dirname) {}".format(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="files"))), + "$(which basename) {}".format(get_random_list_entry(gen_user.get_files_of_mounted_file_system(param="files"))), + ] + # '$(which setfacl) -m {}:{} {}'.format(get_random_list_entry(users), + # gen_user.get_random_chmod_mode(), + # get_random_list_entry( + # gen_user.get_files_of_mounted_file_system( + # param='files'))) + # ] needs to be explicitly enabled during mount -o acls + random.shuffle(user_emulation) + return user_emulation + + def get_backup_user_emulation(self): + gen_user = GenericUserEmulation(vm_object=self.vm_object, remote_mount_path=self.rpath) + + user_emulation = [ + "$(which find) {}/*".format(self.rpath), + "$(which ls) -lah {}/*".format(self.rpath), + "$(touch) {}".format(os.path.join(self.rpath, "TOUCHED")), + "$(mkdir) -p {}/a/b/c".format(self.rpath), + "$(which dd) if=/dev/urandom of={} bs={} count={}".format( + os.path.join(self.rpath, "DATA"), 1 << 20, random.randint(1, 5) + ), + "$(which mknod) {}".format(os.path.join(self.rpath, "NODDED")), + "$(which echo) APPENDED >> {}".format(os.path.join(self.rpath, "ECHOED")), + ] + random.shuffle(user_emulation) + for entry in [ + "$(which ln) {} {}".format(os.path.join(self.rpath, "DATA"), "HARDLINK"), + "$(which ln) -s {} {}".format(os.path.join(self.rpath, "DATA"), "SOFTLINK"), + "$(which readlink) {}".format(os.path.join(self.rpath, get_random_list_entry(["SOFTLINK", "HARDLINK"]))), + "$(which chmod) {} {}".format(gen_user.get_random_chmod_mode(), os.path.join(self.rpath, "DATA")), + "$(which rm) -rf {}/*".format(self.rpath), + ]: + user_emulation.append(entry) + return user_emulation + + def set_user_emulation(self): + try: + gen_user = GenericUserEmulation(vm_object=self.vm_object, remote_mount_path=self.rpath) + res = gen_user.get_files_of_mounted_file_system("files") + if any("Traceback" in pos for pos in res): + ue_cmd_lst = self._failed_trav_user_emul() + else: + ue_cmd_lst = self.prepare_user_emulation() + except AttributeError: + ue_cmd_lst = self._failed_trav_user_emul() + return ue_cmd_lst + + def _failed_trav_user_emul(self): + print("\t > Failed to perform a file traversal on mounted file system") + print("\t > Starting backup user emulation that only attempts to write to disk...\n") + ue_cmd_lst = self.get_backup_user_emulation() + return ue_cmd_lst + + @staticmethod + def rnd_e_lst_len(emu_list, multiplier): + new_emu_list = [] + for i in range(multiplier): + new_emu_list += random.sample(emu_list, random.randint(0, len(emu_list))) + return new_emu_list diff --git a/src/UserEmulation/__init__.py b/src/UserEmulation/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/Verifier/Crash_Verifier.py b/src/Verifier/Crash_Verifier.py new file mode 100644 index 0000000..27bb044 --- /dev/null +++ b/src/Verifier/Crash_Verifier.py @@ -0,0 +1,222 @@ +import logging +import os +import pathlib +import re +import sys +import threading +import time +import zipfile +from collections import deque + +THIS_FILE = os.path.dirname(os.path.abspath(__file__)) +sys.path.append(str(pathlib.Path(THIS_FILE).parent)) +sys.path.append(str(pathlib.Path(THIS_FILE))) +from Manager.Manager_FreeBSD import FreeBSD +from Manager.Manager import VmManager +from utility import extract_core_features +from config import fuzzing_config + + +class CrashVerifier(object): + def __init__(self, crash_db, target_os, interval=60): + self.interval = interval + self.crash_fifo = None + self.last_crash_line = 0 + self.path_crash_db = crash_db + self.checked_crashes = [] + self.target = target_os + self.vm_object = None + self.reprod_crash_file = None + self.orig_sha_sum = None + time.sleep(self.interval * 15) + self.init_crash_fifo() + + thread = threading.Thread(target=self.run, name="crash_verifier", args=()) + thread.daemon = True + thread.start() + thread.join() + + @staticmethod + def get_vm_object(): + verifier_vm = VmManager() + verifier_vm.setup(vm_user=fuzzing_config.user, vm_password=fuzzing_config.pw, name="verifier") + verifier_vm.quick_boot(vm_name="verifier") + return verifier_vm + + def run(self): + if len(list(self.crash_fifo)) >= 1: + self.verify() + self.run() + else: + time.sleep(self.interval * 15) + self.init_crash_fifo() + self.run() + + def init_crash_fifo(self): + self.crash_fifo = deque() + crash_db_contents = self.read_crash_db() + self._fill_crash_fifo(crash_db_contents) + + def _fill_crash_fifo(self, crash_db_contents): + for line in crash_db_contents: + if line.split(";")[-3].strip() not in self.checked_crashes: + crash_path = str(line.split("; ")[-3].strip()) + origin_sha_sum = line.split("; ")[-4].strip() + self.crash_fifo.append((crash_path, origin_sha_sum)) + + def verify(self): + next_unverified_crash_tuple = self.crash_fifo.popleft() + next_unverified_crash = next_unverified_crash_tuple[0] + self.orig_sha_sum = next_unverified_crash_tuple[1] + sample = os.path.join(next_unverified_crash, "sample.zip") + syscall_log, sample_file_system = self.get_file_system_and_log_if_present(next_unverified_crash, sample) + command_chain = self.get_command_chain(syscall_log) + if self.target == "freebsd": + self._freebsd_verifier(command_chain, next_unverified_crash, sample_file_system) + self.checked_crashes.append(next_unverified_crash) + self._remove_archive_contents(next_unverified_crash, sample_file_system, syscall_log) + self.vm_object.restore_snapshot(self.vm_object.get_current_snapshot()) + + def _freebsd_verifier(self, command_chain, next_unverified_crash, sample_file_system): + self.vm_object = self.get_vm_object() + self.vm_object.cp_to_guest( + get_files_from=next_unverified_crash, list_of_files_to_copy=sample_file_system, save_files_at="/tmp/", + ) + freebsd_target = FreeBSD( + mount_at=os.path.join("/mnt/", sample_file_system), + rfile=os.path.join("/tmp", sample_file_system), + vm_object=self.vm_object, + ) + if command_chain and freebsd_target.mount_file_system() and self.vm_object.silent_vm_state(): + self._execute_command_chain(command_chain, next_unverified_crash) + elif not command_chain and freebsd_target.mount_file_system() == 2: + with open(os.path.join(next_unverified_crash, "reprod.1"), "w") as f: + f.write("System crashed as expected during mount!\n") + else: + with open(os.path.join(next_unverified_crash, "reprod.0"), "w") as f: + f.write("Command chain was empty. Expected the system to crash during mount!\n") + + def _reset_verifier_vm(self): + self.vm_object.reset_vm() + self.vm_object.new_rshell() + + @staticmethod + def _remove_archive_contents(next_unverified_crash, sample_file_system, syscall_log): + pathlib.Path(syscall_log).unlink() + pathlib.Path(os.path.join(next_unverified_crash, sample_file_system)).unlink() + pathlib.Path(os.path.join(next_unverified_crash, "_".join(x for x in sample_file_system.split("_")[1:]),)).unlink() + + def _execute_command_chain(self, command_chain, next_unverified_crash): + for command in command_chain: + self.vm_object.exec_cmd_quiet(command) + if command != command_chain[-1] and self.vm_object.silent_vm_state(): + continue + elif command != command_chain[-1] and not self.vm_object.silent_vm_state(): + with open(os.path.join(next_unverified_crash, "reprod.2"), "w") as f: + f.write("Command chain mismatch. Manual review necessary!\n") + f.write("Originally crashed at: {}\n".format(command_chain[-1])) + f.write("Now crashed at: {}".format(command)) + self._reset_verifier_vm() + self._fetch_latest_core_file(next_unverified_crash) + elif command == command_chain[-1] and self.vm_object.silent_vm_state(): + with open(os.path.join(next_unverified_crash, "reprod.0"), "w") as f: + f.write("Could not verify crash with loaded command chain: \n{}".format(command_chain)) + elif command == command_chain[-1] and not self.vm_object.silent_vm_state(): + self._reset_verifier_vm() + new_sha_sum = self.get_shasum_of_repro_crash(next_unverified_crash) + if self.orig_sha_sum == new_sha_sum: + with open(os.path.join(next_unverified_crash, "reprod.1"), "w") as f: + f.write("System crashed after executing the same command chain!\n") + f.write("sha256 sums are a match!") + else: + with open(os.path.join(next_unverified_crash, "reprod.2"), "w") as f: + f.write("System crashed after executing the same command chain!\n") + f.write("sha256 sums are a mismatch:\n") + f.write("> Original crash: {}\n".format(self.orig_sha_sum)) + f.write("> Reproduced crash: {}\n".format(new_sha_sum)) + f.write("Manual review necessary!") + + @staticmethod + def get_command_chain(syscall_log): + command_chain = [] + with open(syscall_log, "r") as f: + data = f.readlines() + for line in data: + if line.startswith("[+]") or line.startswith("[!]") and not line.startswith("[!] mount"): + command_chain.append(line.split("] ")[1].strip()) + return command_chain + + def get_file_system_and_log_if_present(self, next_unverified_crash, sample): + if pathlib.Path(sample).is_file(): + with zipfile.ZipFile(sample, "r") as zip_ref: + zip_ref.extractall(next_unverified_crash) + syscall_log, sample_fs = None, None + for file in pathlib.Path(next_unverified_crash).iterdir(): + log_match = re.search(r".*fuzz[0-9]{1,2}_syscall.log", str(file)) + fs_match = re.search(r".*_fuzz[0-9]_[a-zA-Z0-9]+_[0-9]+MB", str(file)) + if log_match: + syscall_log = log_match.group(0) + if fs_match: + sample_fs = fs_match.group(0) + if syscall_log and sample_fs: + return syscall_log, str(pathlib.Path(sample_fs).name) + else: + logging.error("No sample.zip found. Continuing!") + self.verify() + + def read_crash_db(self): + with open(self.path_crash_db, "r") as f: + contents = f.readlines() + return contents + + def _get_latest_core(self): + try: + find_latest_core_file_cmd = ( + '/usr/bin/find /var/crash -name "core*" -print0 | /usr/bin/xargs -0 ls -t | /usr/bin/head -n1' + ) + latest_core_file = self.vm_object.exec_cmd_quiet(find_latest_core_file_cmd) + get_core_file_size_cmd = '/usr/bin/stat {} | /usr/bin/cut -d" " -f8'.format(latest_core_file) + if latest_core_file and int(str(self.vm_object.exec_cmd_quiet(get_core_file_size_cmd)).strip()) > 1: + self.vm_object.exec_cmd_quiet("mv {} /var/crash/core.txt.reprod".format(latest_core_file)) + self.reprod_crash_file = "/var/crash/core.txt.reprod" + else: + return None + except ValueError: + return None + + def _fetch_latest_core_file(self, save_to): + try: + self._get_latest_core() + logging.error("LATEST CORES: {}".format(self.reprod_crash_file)) + if self.reprod_crash_file: + self.vm_object.cp_to_host( + save_files_at=save_to, + get_files_from=str(pathlib.Path(self.reprod_crash_file).parent), + list_of_files_to_copy=str(pathlib.Path(self.reprod_crash_file).name), + ) + self.reprod_crash_file = os.path.join(save_to, str(pathlib.Path(self.reprod_crash_file).name)) + return 1 + else: + logging.error("No new core files found!") + return 0 + except TypeError: + logging.error("No core file(s) found. Continuing!") + return 0 + + def get_shasum_of_repro_crash(self, save_to): + if self._fetch_latest_core_file(save_to): + with open(self.reprod_crash_file, "rb") as f: + data = f.read() + return extract_core_features.get_sha256_sum(extract_core_features.get_core_details(data)) + else: + return "NONE" + + +def main(): + CrashVerifier( + crash_db="/home/dev/git/bsdfuzz/fsfuzz/src/crash_dumps/crash.db", target_os="freebsd", + ) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/src/Verifier/__init__.py b/src/Verifier/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/__init__.py b/src/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/_deprecated/__init__.py b/src/_deprecated/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/_deprecated/makeFS.py b/src/_deprecated/makeFS.py new file mode 100644 index 0000000..120fa3a --- /dev/null +++ b/src/_deprecated/makeFS.py @@ -0,0 +1,940 @@ +import argparse +import json +import logging +import os +import pathlib +import platform +import random +import string +import subprocess +import sys +import uuid + +CHARSET_EASY = string.ascii_letters + string.digits # excluding special characters due to parsing difficulties + +SUPPORTED_FILE_SYSTEMS = { + "freebsd": ["ufs1", "ufs2", "zfs", "ext2", "ext3", "ext4"], + "netbsd": ["4.3bsd", "ufs1", "ufs2", "ext2"], + "openbsd": ["4.3bsd", "ufs1", "ufs2", "ext2"], + "darwin": [], + "linux": ["ext2", "ext3", "ext4", "zfs"], +} + + +def get_os_platform(): + return platform.system().lower() + + +def create_directory(_path): + try: + pathlib.Path(_path).mkdir(parents=True, exist_ok=True) + except OSError as e: + logging.error(e) + + +def get_all_directories_in_path(dir_path): + return [x[0] for x in os.walk(dir_path)] + + +def get_all_files_in_path(dir_path): + list_of_file_paths = [] + for (_dir, _, file_names) in os.walk(dir_path): + list_of_file_paths += [os.path.join(_dir, file) for file in file_names] + for (_dir, dir_names, _) in os.walk(dir_path): + list_of_file_paths += [os.path.join(_dir, d) for d in dir_names] + return list_of_file_paths + + +def get_only_files_in_path(dir_path): + list_of_file_paths = [] + for (_dir, _, file_names) in os.walk(dir_path): + list_of_file_paths += [os.path.join(_dir, file) for file in file_names] + return list_of_file_paths + + +class FileSystemCreator: + def setup(self, **kwargs): + if "file_system_name" in kwargs: + self.file_system_name = kwargs["file_system_name"] + if "file_system_type" in kwargs: + self.file_system_type = kwargs["file_system_type"] + if "file_system_size" in kwargs: + self.file_system_size = kwargs["file_system_size"] + if "generate_amount_of_files" in kwargs: + self.generate_amount_of_files = kwargs["generate_amount_of_files"] + if "max_file_size" in kwargs: + self.max_file_size = kwargs["max_file_size"] + if "mount_at" in kwargs: + self.mount_at = kwargs["mount_at"] + if "save_file_system_at" in kwargs: + self.save_file_system_at = kwargs["save_file_system_at"] + if "mode" in kwargs: + self.mode = kwargs["mode"] + else: + pass + + def __init__(self): + logging.basicConfig(level=logging.DEBUG) + self.file_system_name = None + self.file_system_type = None + self.file_system_size = None + self.generate_amount_of_files = None + self.max_file_size = None + self.mount_at = "/mnt" + self.save_file_system_at = "/tmp/" + self.block_device = None + self.path_to_file_system = None + self.seed = None + self.file_system_logger = {} + self.mode = None + self.class_random_generator = random.Random() # Class bound number generator + self.target_maker = None + + def get_random_string_of_size(self, size, chars=CHARSET_EASY): + self.class_random_generator.seed(self.seed) + generated_string = "".join(self.class_random_generator.choice(chars) for x in range(size)) + return generated_string + + def create_new_path_at_random_location(self, list_of_dirs, ignore_sys_folders=False): + self.class_random_generator.seed(self.seed) + random_index_in_dir_list = self.class_random_generator.randint(0, len(list_of_dirs) - 1) + name_length = self.class_random_generator.randint(1, 255) + if ignore_sys_folders: + if list_of_dirs[random_index_in_dir_list] not in [ + os.path.join(self.mount_at, "lost+found"), + os.path.join(self.mount_at, ".snap"), + ]: + return os.path.join(list_of_dirs[random_index_in_dir_list], self.get_random_string_of_size(size=name_length),) + else: + logging.debug("lost+found or .snap reached, recalling method...") + return self.create_new_path_at_random_location(list_of_dirs) + else: + return os.path.join(list_of_dirs[random_index_in_dir_list], self.get_random_string_of_size(size=name_length),) + + def init_file_system_creation(self): + host_os = get_os_platform() + if not any(x == self.file_system_type for x in SUPPORTED_FILE_SYSTEMS[host_os]): + print("Requested file system not supported on current host os: {}".format(host_os)) + sys.exit(1) + self.create_raw_disk_image() + if host_os == "freebsd": + self.target_maker = FreeBSD( + self.file_system_type, + self.file_system_size, + self.file_system_name, + self.path_to_file_system, + self.mount_at, + self.generate_amount_of_files, + self.max_file_size, + self.mode, + self.save_file_system_at, + ) + elif host_os == "netbsd": + self.target_maker = NetBSD( + self.file_system_type, + self.file_system_size, + self.file_system_name, + self.path_to_file_system, + self.mount_at, + self.generate_amount_of_files, + self.max_file_size, + self.mode, + self.save_file_system_at, + ) + elif host_os == "openbsd": + self.target_maker = OpenBSD( + self.file_system_type, + self.file_system_size, + self.file_system_name, + self.path_to_file_system, + self.mount_at, + self.generate_amount_of_files, + self.max_file_size, + self.mode, + self.save_file_system_at, + ) + elif host_os == "linux": + self.target_maker = Ubuntu( + self.file_system_type, + self.file_system_size, + self.file_system_name, + self.path_to_file_system, + self.mount_at, + self.generate_amount_of_files, + self.max_file_size, + self.mode, + self.save_file_system_at, + ) + self.target_maker.create_file_system() + + def create_raw_disk_image(self): + if not self.file_system_name: + self.file_system_name = "fs_" + str(uuid.uuid4()) + logging.debug(self.file_system_name) + self.path_to_file_system = os.path.join(self.save_file_system_at, self.file_system_name) + logging.debug(self.path_to_file_system) + with open(self.path_to_file_system, "wb") as file: + file.write(b"0" * self.file_system_size) + + def _set_serialize_file_data(self, ctr, full_path): + self.file_system_logger["files"]["seed_{}".format(ctr)]["file_name"] = str(pathlib.Path(full_path).name) + self.file_system_logger["files"]["seed_{}".format(ctr)]["file_path"] = str(pathlib.Path(full_path).parent) + self.file_system_logger["files"]["seed_{}".format(ctr)]["full_path"] = str(full_path) + + def create_new_hardlink_in_current_file_system_structure(self, list_of_files, list_of_only_directories, ctr): + try: + src = self.class_random_generator.choice(list_of_files) + dst = self.create_new_path_at_random_location(list_of_only_directories) + os.link(src, dst) + self.file_system_logger["files"]["seed_{}".format(ctr)]["file_type"] = "HARD_LINK" + self.file_system_logger["files"]["seed_{}".format(ctr)]["source"] = str(src) + self._set_serialize_file_data(ctr, dst) + except OSError: + pass + + def create_new_symlink_in_current_file_system_structure(self, list_of_files, list_of_only_directories, ctr): + try: + src = self.class_random_generator.choice(list_of_files) + dst = self.create_new_path_at_random_location(list_of_only_directories) + os.symlink(src, dst) + self.file_system_logger["files"]["seed_{}".format(ctr)]["file_type"] = "SYM_LINK" + self.file_system_logger["files"]["seed_{}".format(ctr)]["source"] = str(src) + self._set_serialize_file_data(ctr, dst) + except OSError: + pass + + def create_new_file_in_current_file_system_structure(self, location, ctr): + try: + file_size = self.class_random_generator.randrange(0.25 * self.max_file_size, self.max_file_size, 50) + self.file_system_logger["files"]["seed_{}".format(ctr)]["file_type"] = "FILE" + self.file_system_logger["files"]["seed_{}".format(ctr)]["file_size"] = file_size + self._set_serialize_file_data(ctr, location) + with open(location, "wb") as file: + file.write(os.urandom(file_size)) + except OSError: + pass + + def create_new_directory_in_current_file_system_structure(self, dir_path, ctr): + if not os.path.exists(dir_path): + try: + pathlib.Path(dir_path).mkdir(parents=True, exist_ok=True) + self.file_system_logger["files"]["seed_{}".format(ctr)]["file_type"] = "DIR" + self._set_serialize_file_data(ctr, dir_path) + except (OSError, BlockingIOError): + self.create_new_directory_in_current_file_system_structure(dir_path[-3], ctr) + + def _setup_serialize(self): + self.file_system_logger["fs_name"] = self.file_system_name + self.file_system_logger["fs_type"] = self.file_system_type + self.file_system_logger["fs_size (MB)"] = str(int(self.file_system_size) >> 20) + self.file_system_logger["amount_files"] = self.generate_amount_of_files + self.file_system_logger["max_file_size (MB)"] = str(int(self.max_file_size) >> 20) + self.file_system_logger["files"] = {} + self.file_system_logger["files"]["init_files"] = {} + + def _set_seed(self): + if self.mode: + self.seed = self.class_random_generator.getrandbits(random.randint(1, 1024)) + else: + self.seed = None + self.class_random_generator.seed(self.seed) + + def populate_file_system(self): + self._setup_serialize() + try: + self._prepare_file_system_with_dummy_files() + except OSError: + pass + for file_ctr in range(self.generate_amount_of_files): + self._set_seed() + self.file_system_logger["files"]["seed_{}".format(file_ctr)] = {} + self.file_system_logger["files"]["seed_{}".format(file_ctr)]["seed_value"] = self.seed + coin_toss = self.class_random_generator.randint(0, 7) + all_dirs = get_all_directories_in_path(self.mount_at) + if coin_toss in range(0, 4): + self.file_system_logger["files"]["seed_{}".format(file_ctr)]["file_type"] = "FILE" + self.create_new_file_in_current_file_system_structure(self.create_new_path_at_random_location(all_dirs), file_ctr) + if coin_toss in range(4, 6): + self.file_system_logger["files"]["seed_{}".format(file_ctr)]["file_type"] = "DIR" + self.create_new_directory_in_current_file_system_structure( + self.create_new_path_at_random_location(all_dirs), file_ctr + ) + if coin_toss == 6: + self.file_system_logger["files"]["seed_{}".format(file_ctr)]["file_type"] = "SYM_LINK" + all_files = get_all_files_in_path(self.mount_at) + self.create_new_symlink_in_current_file_system_structure(all_files, all_dirs, file_ctr) + if coin_toss == 7: + self.file_system_logger["files"]["seed_{}".format(file_ctr)]["file_type"] = "HARD_LINK" + only_files_no_dirs = get_only_files_in_path(self.mount_at) + self.create_new_hardlink_in_current_file_system_structure(only_files_no_dirs, all_dirs, file_ctr) + print(json.dumps(self.file_system_logger, separators=(",", ":"))) + + def _get_random_name_for_dummy_file(self): + self._set_seed() + name_length = self.class_random_generator.randint(1, 255) + _name = self.get_random_string_of_size(size=name_length) + return _name + + def _prepare_file_system_with_dummy_files(self): + for i, v in list(enumerate(["FILE", "SYM_LINK", "DIR"])): + _name = self._get_random_name_for_dummy_file() + _path = os.path.join(self.mount_at, _name) + if "FILE" in v: + _touch_fn = _name + pathlib.Path(_path).touch() + elif "SYM_LINK" in v: + lnk_path = os.path.join(self.mount_at, _name) + os.symlink(os.path.join(self.mount_at, _touch_fn), lnk_path) + else: + pathlib.Path(_path).mkdir(parents=True, exist_ok=True) + self._set_serialize_init_files_data(_name, _path, i, v) + + def _set_serialize_init_files_data(self, _name, _path, i, v): + self.file_system_logger["files"]["init_files"]["init_{}".format(i)] = {} + self.file_system_logger["files"]["init_files"]["init_{}".format(i)]["seed"] = self.seed + self.file_system_logger["files"]["init_files"]["init_{}".format(i)]["file_type"] = v + self.file_system_logger["files"]["init_files"]["init_{}".format(i)]["name"] = _name + self.file_system_logger["files"]["init_files"]["init_{}".format(i)]["path"] = self.mount_at + self.file_system_logger["files"]["init_files"]["init_{}".format(i)]["full_path"] = _path + if v == "SYM_LINK": + self.file_system_logger["files"]["init_files"]["init_{}".format(i)]["source"] = self.file_system_logger["files"][ + "init_files" + ]["init_0"]["full_path"] + + def parse_arguments(self): + parser = argparse.ArgumentParser() + parser.add_argument("-fs", "--filesystem", type=str, help="ext2, ext3, ext4, ufs, zfs") + parser.add_argument( + "-s", "--size", type=int, default=1024, help="Specify the size in MB of the newly created file system, default: 1MB", + ) + parser.add_argument( + "-n", "--name", type=str, help="custom name you want to give the file system, default: fs_rndstr", + ) + parser.add_argument( + "-o", "--output_dir", type=str, help="Path to store the newly created file system, default: /tmp/", + ) + parser.add_argument( + "-p", "--populate", type=int, help="Number of files/directories that should be created", + ) + parser.add_argument( + "-ps", "--populate_size", type=int, help="Upper file size limit in KB for -p option", + ) + parser.add_argument( + "-mnt", "--mount", type=str, help="path to mount the filesystem for populating it", + ) + parser.add_argument( + "-m", + "--mode", + type=int, + default=1, + help="1 for determinism, or 0 for random (random does not use seeds and does no logging)", + ) + parser.add_argument("-fsls", "--fileSystemLogFile_and_size", action="append", nargs=2) + args = parser.parse_args() + if args.fileSystemLogFile_and_size: + with open(args.fileSystemLogFile_and_size[0][0]) as f: + log_data = json.loads(f.read()) + + shaper = FreeBSDShaper( + log_data=log_data, + fs_name=log_data["fs_name"], + fs_type=log_data["fs_type"], + fs_size=int(args.fileSystemLogFile_and_size[0][1]), + amount_files=int(log_data["amount_files"]), + max_file_size=int(log_data["max_file_size (MB)"]), + path_to_file_system=None, + mode=1, + ) + shaper.init_file_system_creation() + sys.exit(1) + if not args.size or not args.filesystem: + parser.print_help() + sys.exit(1) + if args.size < 64 and args.filesystem == "zfs": + parser.error("ZFS needs at least 64MB of disk size") + sys.exit(1) + elif args.size < 2 and args.filesystem == "ext3": + parser.error("EXT3 needs at least 2MB of disk size") + sys.exit(1) + if (args.populate and not args.populate_size) or (args.populate_size and not args.populate): + parser.error("-p and -ps depend on each other. Set both or neither of them!") + sys.exit(1) + elif args.populate_size and args.populate: + args.populate_size = args.populate_size << 10 # shift bytes into Megabytes + args.size = args.size << 20 + if args.populate and args.populate_size and (args.populate * args.populate_size > args.size): + parser.error("New file system does not hold enough free space to write all requested files!") + sys.exit(1) + if args.output_dir: + create_directory(args.output_dir) + else: + create_directory(self.save_file_system_at) + if args.mount: + create_directory(args.mount) + else: + create_directory(self.mount_at) + if args.mode: + self.mode = 1 + else: + self.mode = 0 + return args + + +####################################################################################################################### +####################################################################################################################### +####################################################################################################################### + + +class Ubuntu(FileSystemCreator): + def __init__( + self, fs_type, fs_size, fs_name, path_to_file_system, mount_at, amount_files, max_file_size, mode, save_file_system_at, + ): + super(Ubuntu, self).__init__() + self.file_system_type = fs_type + self.file_system_size = fs_size + self.file_system_name = fs_name + self.path_to_file_system = path_to_file_system + self.block_device = None + self.mount_at = mount_at + self.generate_amount_of_files = amount_files + self.max_file_size = max_file_size + self.mode = mode + self.save_file_system_at = save_file_system_at + + def create_file_system(self): + self.make_block_device() + self.format_file_system() + if self.generate_amount_of_files and self.max_file_size: + if self.file_system_type != "zfs": + self.mount_at = os.path.join(self.mount_at, self.file_system_name) + FileSystemCreator.mount_at = self.mount_at + logging.info("Mounting...") + self.mount_file_system() + self.populate_file_system() + self.unmount_file_system() + if self.file_system_type == "zfs" and not self.generate_amount_of_files: + self.unmount_zfs() + + def format_file_system(self): + if self.file_system_type in ["ext2", "ext3", "ext4"]: + self.make_ext() + elif self.file_system_type == "zfs": + self.make_zfs() + logging.debug("{} was created successfully".format(self.file_system_name)) + + def make_block_device(self): + cmd_find_loopdev = "losetup -f" + self.block_device = subprocess.check_output(cmd_find_loopdev.split(), encoding="UTF-8").strip() + cmd = "losetup {} {}".format(self.block_device, self.path_to_file_system) + subprocess.check_output(cmd.split(), encoding="UTF-8").strip() + logging.debug("block device {} created".format(self.block_device)) + + def destroy_block_device(self): + cmd_destroy_loopdev = "losetup -d {}".format(self.block_device) + subprocess.call(cmd_destroy_loopdev.split(), stdout=subprocess.DEVNULL) + + def make_ext(self): + cmd = "/sbin/mkfs.{} -v {}".format(self.file_system_type, self.path_to_file_system) + subprocess.call(cmd.split(), stdout=subprocess.DEVNULL) + + def make_zfs(self): + self.file_system_name = "pool_" + self.file_system_name + subprocess.call("zpool create {} {}".format(self.file_system_name, self.block_device).split()) + subprocess.call("zfs set mountpoint=/mnt/{} {}".format(self.file_system_name, self.file_system_name).split()) + subprocess.call("zfs set atime=off {}".format(self.file_system_name).split()) + self.mount_at = os.path.join("/mnt", self.file_system_name) + FileSystemCreator.mount_at = self.mount_at + + def mount_file_system(self): + pathlib.Path(self.mount_at).mkdir(parents=True, exist_ok=True) + cmd_mount = "/bin/mount -t {} {} {}".format(self.file_system_type, self.block_device, self.mount_at) + logging.debug(cmd_mount) + try: + subprocess.call(cmd_mount.split(), stdout=subprocess.DEVNULL) + except subprocess.CalledProcessError: + logging.error("Failed to mount {} during populating phase".format(self.file_system_name)) + self.destroy_block_device() + sys.exit(1) + except RuntimeError as e: + logging.error(e) + self.destroy_block_device() + sys.exit(1) + + def unmount_file_system(self): + if self.file_system_type in ["ext2", "ext3", "ext4"]: + self.unmount_ext_or_ufs() + if self.file_system_type == "zfs": + self.unmount_zfs() + + def unmount_ext_or_ufs(self): + cmd_umnt = "/bin/umount {}".format(self.block_device) + try: + subprocess.call(cmd_umnt.split(), stdout=subprocess.DEVNULL) + except RuntimeError as e: + logging.error(e) + finally: + self.destroy_block_device() + + def unmount_zfs(self): + cmd_export_pool = "zpool export {}".format(self.file_system_name) + try: + subprocess.call(cmd_export_pool.split(), stdout=subprocess.DEVNULL) + self.destroy_block_device() + except RuntimeError as e: + logging.warning(e) + sys.exit(1) + + +####################################################################################################################### +####################################################################################################################### +####################################################################################################################### + + +class FreeBSD(FileSystemCreator): + def __init__( + self, fs_type, fs_size, fs_name, path_to_file_system, mount_at, amount_files, max_file_size, mode, save_file_system_at, + ): + super(FreeBSD, self).__init__() + self.file_system_type = fs_type + self.file_system_size = fs_size + self.file_system_name = fs_name + self.path_to_file_system = path_to_file_system + self.block_device = None + self.mount_at = mount_at + self.generate_amount_of_files = amount_files + self.max_file_size = max_file_size + self.mode = mode + self.save_file_system_at = save_file_system_at + + def create_file_system(self): + self.make_block_device() + self.format_file_system() + if self.generate_amount_of_files and self.max_file_size: + if self.file_system_type != "zfs": + self.mount_at = os.path.join(self.mount_at, self.file_system_name) + FileSystemCreator.mount_at = self.mount_at + logging.info("Mounting...") + self.mount_file_system() + self.populate_file_system() + self.unmount_file_system() + if self.file_system_type == "zfs" and not self.generate_amount_of_files: + self.unmount_zfs() + + def format_file_system(self): + if self.file_system_type in ["ext2", "ext3", "ext4"]: + self.make_ext() + elif "ufs" in self.file_system_type: + self.make_ufs() + elif self.file_system_type == "zfs": + self.make_zfs() + logging.debug("{} was created successfully".format(self.file_system_name)) + + def make_block_device(self): + cmd = "/sbin/mdconfig -a -t vnode -f {}".format(self.path_to_file_system) + _blk_dev = subprocess.check_output(cmd.split(), encoding="UTF-8").strip() + self.block_device = os.path.join("/dev", _blk_dev) + logging.debug("block device {} created".format(self.block_device)) + return self.block_device + + def destroy_block_device(self): + cmd_del_blk_dev = "/sbin/mdconfig -d -u {}".format(self.block_device) + subprocess.call(cmd_del_blk_dev.split(), stdout=subprocess.DEVNULL) + + def make_ufs(self): + if self.file_system_type == "ufs1": + cmd = "/sbin/newfs -O 1 {}".format(self.block_device) + else: + cmd = "/sbin/newfs {}".format(self.block_device) + subprocess.call(cmd.split(), close_fds=True, stdout=subprocess.DEVNULL) + + def make_ext(self): + cmd = "/usr/local/sbin/mkfs.{} -v {}".format(self.file_system_type, self.path_to_file_system) + subprocess.call(cmd.split(), stdout=subprocess.DEVNULL) + + def make_zfs(self): + self.file_system_name = "pool_" + self.file_system_name + subprocess.call("zpool create {} {}".format(self.file_system_name, self.block_device).split()) + subprocess.call("zfs set mountpoint=/mnt/{} {}".format(self.file_system_name, self.file_system_name).split()) + subprocess.call("zfs set atime=off {}".format(self.file_system_name).split()) + self.mount_at = os.path.join("/mnt", self.file_system_name) + FileSystemCreator.mount_at = self.mount_at + + def mount_file_system(self): + mnt_param = "" + if self.file_system_type in ["ext2", "ext3", "ext4"]: + mnt_param = "ext2fs" + elif "ufs" in self.file_system_type: + mnt_param = "ufs" + pathlib.Path(self.mount_at).mkdir(parents=True, exist_ok=True) + cmd_mount = "/sbin/mount -t {} {} {}".format(mnt_param, self.block_device, self.mount_at) + logging.debug(cmd_mount) + try: + subprocess.call(cmd_mount.split(), stdout=subprocess.DEVNULL) + except subprocess.CalledProcessError: + logging.error("Failed to mount {} during populating phase".format(self.file_system_name)) + self.destroy_block_device() + sys.exit(1) + except RuntimeError as e: + logging.error(e) + self.destroy_block_device() + sys.exit(1) + + def unmount_file_system(self): + if self.file_system_type in ["ext2", "ext3", "ext4", "ufs1", "ufs2"]: + self.unmount_ext_or_ufs() + if self.file_system_type == "zfs": + self.unmount_zfs() + + def unmount_ext_or_ufs(self): + cmd_umnt = "/sbin/umount {}".format(self.block_device) + try: + subprocess.call(cmd_umnt.split(), stdout=subprocess.DEVNULL) + except RuntimeError as e: + logging.error(e) + finally: + self.destroy_block_device() + + def unmount_zfs(self): + cmd_export_pool = "zpool export {}".format(self.file_system_name) + try: + subprocess.call(cmd_export_pool.split(), stdout=subprocess.DEVNULL) + self.destroy_block_device() + except RuntimeError as e: + logging.warning(e) + sys.exit(1) + + +####################################################################################################################### +####################################################################################################################### +####################################################################################################################### + + +class NetBSD(FileSystemCreator): + def __init__( + self, fs_type, fs_size, fs_name, path_to_file_system, mount_at, amount_files, max_file_size, mode, save_file_system_at, + ): + super(NetBSD, self).__init__() + self.file_system_type = fs_type + self.file_system_size = fs_size + self.file_system_name = fs_name + self.path_to_file_system = path_to_file_system + self.block_device = None + self.mount_at = mount_at + self.generate_amount_of_files = amount_files + self.max_file_size = max_file_size + self.mode = mode + self.save_file_system_at = save_file_system_at + + def create_file_system(self): + self.make_block_device() + self.format_file_system() + if self.generate_amount_of_files and self.max_file_size: + self.mount_at = os.path.join(self.mount_at, self.file_system_name) + FileSystemCreator.mount_at = self.mount_at + logging.info("Mounting...") + self.mount_file_system() + self.populate_file_system() + self.unmount_file_system() + + def format_file_system(self): + if self.file_system_type == "ext2": + self.make_ext() + elif "ufs" in self.file_system_type or "4.3bsd" in self.file_system_type: + self.make_ufs() + logging.debug("{} was created successfully".format(self.file_system_name)) + + def make_block_device(self): + cmd = "/usr/sbin/vndconfig vnd0 {}".format(self.path_to_file_system) + _ = subprocess.check_output(cmd.split(), encoding="utf-8").strip() + self.block_device = "/dev/vnd0" + cmd_disklabel = "/sbin/disklabel {}".format(self.block_device) + subprocess.call(cmd_disklabel.split(), stdout=subprocess.DEVNULL) + self.block_device = "/dev/rvnd0" + logging.debug("block device {} created".format(self.block_device)) + + def destroy_block_device(self): + cmd_del_blk_dev = "/usr/sbin/vndconfig -u {}".format(self.block_device.split("/")[-1]) + subprocess.call(cmd_del_blk_dev.split(), stdout=subprocess.DEVNULL) + + def make_ufs(self): + if self.file_system_type == "4.3bsd": + cmd = "/sbin/newfs -O 0 {}".format(self.block_device) + elif self.file_system_type == "ufs1": + cmd = "/sbin/newfs -O 1 {}".format(self.block_device) + else: + cmd = "/sbin/newfs -O 2 {}".format(self.block_device) + subprocess.call(cmd.split(), close_fds=True, stdout=subprocess.DEVNULL) + + def make_ext(self): + cmd = "/sbin/newfs_ext2fs {}".format(self.block_device) + subprocess.call(cmd.split(), stdout=subprocess.DEVNULL) + + def mount_file_system(self): + mnt_param = "" + self.block_device = self.block_device.translate({ord(c): None for c in "r"}) + if self.file_system_type == "ext2": + mnt_param = "ext2fs" + elif "ufs" in self.file_system_type or "4.3bsd" in self.file_system_type: + mnt_param = "ufs" + pathlib.Path(self.mount_at).mkdir(parents=True, exist_ok=True) + cmd_mount = "/sbin/mount -t {} {} {}".format(mnt_param, self.block_device, self.mount_at) + logging.debug(cmd_mount) + try: + subprocess.call(cmd_mount.split(), stdout=subprocess.DEVNULL) + except subprocess.CalledProcessError: + logging.error("Failed to mount {} during populating phase".format(self.file_system_name)) + self.destroy_block_device() + sys.exit(1) + except RuntimeError as e: + logging.error(e) + self.destroy_block_device() + sys.exit(1) + + def unmount_file_system(self): + self.unmount_ext_or_ufs() + + def unmount_ext_or_ufs(self): + cmd_umnt = "/sbin/umount {}".format(self.block_device) + try: + subprocess.call(cmd_umnt.split(), stdout=subprocess.DEVNULL) + except RuntimeError as e: + logging.error(e) + finally: + self.destroy_block_device() + + +####################################################################################################################### +####################################################################################################################### +####################################################################################################################### + + +class OpenBSD(FileSystemCreator): + def __init__( + self, fs_type, fs_size, fs_name, path_to_file_system, mount_at, amount_files, max_file_size, mode, save_file_system_at, + ): + super(OpenBSD, self).__init__() + self.file_system_type = fs_type + self.file_system_size = fs_size + self.file_system_name = fs_name + self.path_to_file_system = path_to_file_system + self.block_device = None + self.mount_at = mount_at + self.generate_amount_of_files = amount_files + self.max_file_size = max_file_size + self.mode = mode + self.save_file_system_at = save_file_system_at + + def create_file_system(self): + self.make_block_device() + self.format_file_system() + if self.generate_amount_of_files and self.max_file_size: + self.mount_at = os.path.join(self.mount_at, self.file_system_name) + FileSystemCreator.mount_at = self.mount_at + logging.info("Mounting...") + self.mount_file_system() + self.populate_file_system() + self.unmount_file_system() + + def format_file_system(self): + if self.file_system_type == "ext2": + self.make_ext() + elif "ufs" in self.file_system_type or "4.3bsd" in self.file_system_type: + self.make_ufs() + logging.debug("{} was created successfully".format(self.file_system_name)) + + def make_block_device(self): + cmd = "/sbin/vnconfig vnd0 {}".format(self.path_to_file_system) + _ = subprocess.check_output(cmd.split(), encoding="utf-8").strip() + self.block_device = "/dev/vnd0" + cmd_disklabel = "/sbin/disklabel -A {}".format(self.block_device.split("/")[-1]) + subprocess.call(cmd_disklabel.split(), stdout=subprocess.DEVNULL) + self.block_device = ( + subprocess.check_output(cmd_disklabel.split(), stderr=subprocess.STDOUT, encoding="utf-8").split()[1][:-1].strip() + ) + logging.debug("block device {} created".format(self.block_device)) + + def destroy_block_device(self): + cmd_del_blk_dev = "/sbin/vnconfig -u {}".format(self.block_device.split("/")[-1]) + subprocess.call(cmd_del_blk_dev.split(), stdout=subprocess.DEVNULL) + + def make_ufs(self): + if self.file_system_type == "4.3bsd": + cmd = "/sbin/newfs -O 0 {}".format(self.block_device) + elif self.file_system_type == "ufs1": + cmd = "/sbin/newfs -O 1 {}".format(self.block_device) + else: + cmd = "/sbin/newfs -O 2 {}".format(self.block_device) + subprocess.call(cmd.split(), close_fds=True, stdout=subprocess.DEVNULL) + + def make_ext(self): + cmd = "/sbin/newfs_ext2fs -I {}".format(self.block_device) + subprocess.call(cmd.split(), stdout=subprocess.DEVNULL) + + def mount_file_system(self): + mnt_param = "" + self.block_device = self.block_device.translate({ord(c): None for c in "r"}) + if self.file_system_type == "ext2": + mnt_param = "ext2fs" + elif "ufs" in self.file_system_type or "4.3bsd" in self.file_system_type: + mnt_param = "ffs" + pathlib.Path(self.mount_at).mkdir(parents=True, exist_ok=True) + cmd_mount = "/sbin/mount -t {} {} {}".format(mnt_param, self.block_device, self.mount_at) + logging.debug(cmd_mount) + try: + subprocess.call(cmd_mount.split(), stdout=subprocess.DEVNULL) + except subprocess.CalledProcessError: + logging.error("Failed to mount {} during populating phase".format(self.file_system_name)) + self.destroy_block_device() + sys.exit(1) + except RuntimeError as e: + logging.error(e) + self.destroy_block_device() + sys.exit(1) + + def unmount_file_system(self): + self.unmount_ext_or_ufs() + + def unmount_ext_or_ufs(self): + cmd_umnt = "/sbin/umount {}".format(self.block_device) + try: + subprocess.call(cmd_umnt.split(), stdout=subprocess.DEVNULL) + except RuntimeError as e: + logging.error(e) + finally: + self.destroy_block_device() + + +####################################################################################################################### +####################################################################################################################### +####################################################################################################################### + + +class FreeBSDShaper(FreeBSD): + def __init__( + self, log_data, amount_files, fs_name, fs_size, fs_type, max_file_size, path_to_file_system, mode, + ): + self.data = log_data + self.shaper_random_generator = random.Random() + self.generate_amount_of_files = amount_files + self.file_system_type = fs_type + self.file_system_size = fs_size << 20 + self.path_to_file_system = path_to_file_system + self.max_file_size = max_file_size << 10 + self.file_system_name = "REPLICA_{}MB_OF_".format(int(self.file_system_size) >> 20) + fs_name + self.mount_at = os.path.join("/mnt/", self.file_system_name) + self.mode = mode + super(FreeBSDShaper, self).__init__( + amount_files=self.generate_amount_of_files, + fs_name=self.file_system_name, + fs_size=self.file_system_size, + fs_type=self.file_system_type, + max_file_size=self.max_file_size, + mode=1, + mount_at=self.mount_at, + path_to_file_system=self.path_to_file_system, + ) + + def init_file_system_creation(self): + self.create_raw_disk_image() + if get_os_platform() == "freebsd": + self.create_file_system() + + def create_file_system(self): + self.create_raw_disk_image() + self.make_block_device() + self.format_file_system() + self.populate_file_system() + self.unmount_file_system() + + def populate_file_system(self): + if self.file_system_type != "zfs": + self.mount_file_system() + self._setup_serialize() + self._init_files() + for file_ctr in range(self.generate_amount_of_files): + self.seed = self.data["files"]["seed_{}".format(file_ctr)]["seed_value"] + self.file_system_logger["files"]["seed_{}".format(file_ctr)] = {} + self.file_system_logger["files"]["seed_{}".format(file_ctr)]["seed_value"] = self.seed + self.shaper_random_generator.seed(self.seed) + coin_toss = self.shaper_random_generator.randint(1, 7) + all_dirs = get_all_directories_in_path(self.mount_at) + self._populate_on_coin_toss(all_dirs, coin_toss, file_ctr) + if ( + self.file_system_logger["files"]["seed_{}".format(file_ctr)]["file_name"] + != self.data["files"]["seed_{}".format(file_ctr)]["file_name"] + ): + self._populate_fs_error_logging(file_ctr) + print("[+] Finished populating the replica fs successfully!") + json.dumps(self.file_system_logger) + + def _populate_fs_error_logging(self, f): + logging.error("Name mismatching for {}".format(self.data["files"]["seed_{}".format(f)])) + logging.error("Expected: {}".format(self.data["files"]["seed_{}".format(f)]["file_name"])) + logging.error("Got: {}".format(self.file_system_logger["files"]["seed_{}".format(f)]["file_name"])) + sys.exit(1) + + def _populate_on_coin_toss(self, all_dirs, coin_toss, file_ctr): + if coin_toss in range(1, 4): + self.file_system_logger["files"]["seed_{}".format(file_ctr)]["file_type"] = "FILE" + self.create_new_file_in_current_file_system_structure(self.create_new_path_at_random_location(all_dirs), file_ctr) + if coin_toss in range(4, 6): + self.file_system_logger["files"]["seed_{}".format(file_ctr)]["file_type"] = "DIR" + self.create_new_directory_in_current_file_system_structure( + self.create_new_path_at_random_location(all_dirs), file_ctr + ) + if coin_toss == 6: + self.file_system_logger["files"]["seed_{}".format(file_ctr)]["file_type"] = "SYM_LINK" + all_files = get_all_files_in_path(self.mount_at) + self.create_new_symlink_in_current_file_system_structure(all_files, all_dirs, file_ctr) + if coin_toss == 7: + self.file_system_logger["files"]["seed_{}".format(file_ctr)]["file_type"] = "HARD_LINK" + only_files_no_dirs = get_only_files_in_path(self.mount_at) + self.create_new_hardlink_in_current_file_system_structure(only_files_no_dirs, all_dirs, file_ctr) + + def _init_files(self): + for i, v in list(enumerate(["FILE", "SYM_LINK", "DIR"])): + self.seed = self.data["files"]["init_files"]["init_{}".format(i)]["seed"] + self.shaper_random_generator.seed(self.seed) + name_length = self.shaper_random_generator.randint(1, 255) + _name = self.get_random_string_of_size(size=name_length) + _path = os.path.join(self.mount_at, _name) + if "FILE" in v: + _touch_fn = _name + pathlib.Path(_path).touch() + elif "SYM_LINK" in v: + lnk_path = os.path.join(self.mount_at, _name) + os.symlink(os.path.join(self.mount_at, _touch_fn), lnk_path) + else: + pathlib.Path(_path).mkdir(parents=True, exist_ok=True) + self._set_serialize_init_files_data(_name, _path, i, v) + if _name != self.data["files"]["init_files"]["init_{}".format(i)]["name"]: + self._init_fs_error_logging(i) + + def _init_fs_error_logging(self, i): + logging.error("[!] Name mismatching for {}".format(self.data["files"]["init_files"]["init_{}".format(i)]["file_type"])) + logging.error("Expected: {}".format(self.data["files"]["init_files"]["init_{}".format(i)]["name"])) + logging.error("Got: {}".format(self.file_system_logger["files"]["init_files"]["init_{}".format(i)]["name"])) + sys.exit(1) + + +def main(): + if os.geteuid() != 0: + print("[!] Script needs to be run as root!") + sys.exit(1) + logging.basicConfig(level="ERROR") + file_system_maker = FileSystemCreator() + arguments = file_system_maker.parse_arguments() + file_system_maker.setup( + file_system_name=arguments.name, + file_system_type=str(arguments.filesystem).lower(), + file_system_size=arguments.size, + generate_amount_of_files=arguments.populate, + max_file_size=arguments.populate_size, + mode=arguments.mode, + save_file_system_at=arguments.output_dir, + ) + file_system_maker.init_file_system_creation() + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/src/config/__init__.py b/src/config/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/config/fuzzing_config.py b/src/config/fuzzing_config.py new file mode 100644 index 0000000..9d89e0f --- /dev/null +++ b/src/config/fuzzing_config.py @@ -0,0 +1,21 @@ +# [fuzzing task specs] +# List of dictionaries specifying each fuzzing instance +fuzzer = [ + { + "name": "fuzz1", # Name for internal bookkeeping + "fs_creator_vm": "genBox", # Name as specified in libvirt for the VM handling the file system generation + "fuzzing_vm": "fuzzBox", # Name as specified in libvirt for the VM handling the file system generation + "mutation_engine": "radamsa, 0", # Mutation Engine that is to be used, and size of mutation + "target_fs": "ufs2", # Target file system + "target_size": 15, # Max file system size in Megabyte + "populate_with_files": 10, # Amount of file that will be generated + "max_file_size": 1024, # Maximum file size in bytes for each generated file + "enable_dyn_scaling": False, # Dynamic scaling will increase the filesystem size periodically + }, +] + +# [credentials] +# Credentials for the root user for the VMs +# It is expected that these are the same across all instances +user = "root" +pw = "root" diff --git a/src/makeFS2.py b/src/makeFS2.py new file mode 100644 index 0000000..e6ce2f1 --- /dev/null +++ b/src/makeFS2.py @@ -0,0 +1,895 @@ +import argparse +import json +import logging +import os +import pathlib +import platform +import random +import string +import subprocess +import sys +import uuid +from shutil import rmtree +from typing import List + +CHARSET_EASY = string.ascii_letters + string.digits # excluding special characters due to parsing difficulties + +SUPPORTED_FILE_SYSTEMS = { + "freebsd": ["ufs1", "ufs2", "zfs", "ext2", "ext3", "ext4"], + "netbsd": ["4.3bsd", "ufs1", "ufs2", "ext2"], + "openbsd": ["4.3bsd", "ufs1", "ufs2", "ext2"], + "linux": ["uf1", "ufs2", "ext2", "ext3", "ext4", "zfs"], + "darwin": ["apfs"], +} + + +def _mk_dir(_path: str): + pathlib.Path(_path).mkdir(parents=True, exist_ok=True) + + +def _get_all_dirs(_path: str): + return [x[0] for x in os.walk(_path)] + + +def _get_all_files(_path: str): + files = [] + for (_dir, _, file_names) in os.walk(_path): + files += [os.path.join(_dir, file) for file in file_names] + for (_dir, dir_names, _) in os.walk(_path): + files += [os.path.join(_dir, d) for d in dir_names] + return files + + +def _get_all_data_files(_path: str): + files = [] + for (_dir, _, file_names) in os.walk(_path): + files += [os.path.join(_dir, file) for file in file_names] + return files + + +def _chk_availability(cmd: str): + return not subprocess.call(["which", f"{cmd}"], stdout=subprocess.DEVNULL) + + +class GenericFilesystemCreator: + def __init__(self): + self.fs_name = None + self.fs_type = None + self.fs_size = None + self.n_files = None + self.max_fsize = None + self.mount_pt = "/mnt" + self.save_pt = "/tmp/" + self.path = None + self.seed = None + self.logger = {} + self.mode = None + self.rng = random.Random() # Class bound number generator + self.host = platform.system().lower() + self.data = None + + def __setup__(self, **kwargs): + if "fs_name" in kwargs: + self.fs_name = kwargs["fs_name"] + if "fs_type" in kwargs: + self.fs_type = kwargs["fs_type"] + if "fs_size" in kwargs: + self.fs_size = kwargs["fs_size"] + if "n_files" in kwargs: + self.n_files = kwargs["n_files"] + if "max_fsize" in kwargs: + self.max_fsize = kwargs["max_fsize"] + if "mount_pt" in kwargs: + self.mount_pt = kwargs["mount_pt"] + if "save_pt" in kwargs: + self.save_pt = kwargs["save_pt"] + if "mode" in kwargs: + self.mode = kwargs["mode"] + if "data" in kwargs: + self.data = kwargs["data"] + + def mk_file_system(self): + self._parse_opts() + if not any(x == self.fs_type for x in SUPPORTED_FILE_SYSTEMS[self.host]): + logging.error(f"Requested file system not supported on current host os: {self.host}") + sys.exit(1) + self._init_mk_fs() + host = self._set_target() + self._create_fs(host) + + def _set_target(self): + target = None + if self.host == "freebsd": + target = FreeBSD + elif self.host == "netbsd": + target = NetBSD + elif self.host == "openbsd": + target = OpenBSD + elif self.host == "linux": + target = Ubuntu + elif self.host == "darwin": + target = Darwin + return target( + fs=self.fs_type, + size=self.fs_size, + name=self.fs_name, + location=self.path, + mount_pt=self.mount_pt, + n_files=self.n_files, + max_fsize=self.max_fsize, + mode=self.mode, + save_pt=self.save_pt, + ) + + def _create_fs(self, target): + target.mk_fs() + if self.n_files and self.max_fsize: + self._logger_setup() + self._mount(target) + self._init_fs_dummy_data() + self._populate_fs() + target.unmount_fs() + rmtree(self.mount_pt) + else: + print(f"Created empty {self.fs_type} disk: {self.path} {self.fs_name}") + if target.fs_type == "zfs": + target.unmount_fs() + + def _mount(self, target): + if self.fs_type != "zfs": + target.mount_pt = os.path.join(self.mount_pt, self.fs_name) + self.mount_pt = target.mount_pt + logging.info("Mounting...") + target.mount_fs() + + @staticmethod + def generic_mount(flag, dev, location): + try: + subprocess.call( + f"/sbin/mount -t {flag} {dev} {location}".split(), stdout=subprocess.DEVNULL, + ) + return 1 + except subprocess.CalledProcessError: + return 0 + + @staticmethod + def _generic_mk_zfs(name, dev): + if not _chk_availability("zpool"): + logging.error("Could not find zfs utils.") + logging.error("Please install the appropriate tooling: e.g.: zfsutils-linux on Debian.") + sys.exit(1) + try: + subprocess.call(f"zpool create {name} {dev}".split()) + subprocess.call(f"zfs set mountpoint=/mnt/{name} {name}".split()) + subprocess.call(f"zfs set atime=off {name}".split()) + return os.path.join("/mnt", name) + except subprocess.CalledProcessError: + logging.error("Failed in genericMakeZFS routine!") + sys.exit(1) + + def _init_mk_fs(self): + if not self.fs_name: + self._set_fs_name() + self._mk_raw_disk() + + def _mk_raw_disk(self): + self.path = os.path.join(self.save_pt, self.fs_name) + pathlib.Path(self.path).write_bytes(b"0" * self.fs_size) + + def _set_fs_name(self): + self.fs_name = "fs_" + str(uuid.uuid4()) + + def _populate_fs(self): + for f_ctr in range(self.n_files): + if self.data: + self.seed = self.data["files"][f"seed_{f_ctr}"]["seed_value"] + self.rng.seed(self.seed) + else: + self._set_seed() + self._set_logger_seed(f_ctr) + coin_toss = self.rng.randint(0, 7) + all_dirs = _get_all_dirs(self.mount_pt) + self._create_files(all_dirs, coin_toss, f_ctr) + self._hierarchy_sanity_check(f_ctr) + print(json.dumps(self.logger, separators=(",", ":"), indent=4)) + + def _hierarchy_sanity_check(self, f_ctr): + if self.data and self.logger["files"][f"seed_{f_ctr}"]["file_name"] != self.data["files"][f"seed_{f_ctr}"]["file_name"]: + self._shpr_hierarchy_verification(f_ctr) + + def _shpr_hierarchy_verification(self, fctr): + print("[!] Error reproducing same data hierarchy!!\n\n") + print(f"During seed {fctr}") + _expected = self.data["files"][f"seed_{fctr}"]["file_name"] + _actual = self.logger["files"][f"seed_{fctr}"]["file_name"] + print(f"Expected: {_expected}") + print(f"Got: {_actual}") + + def _create_files(self, all_dirs, coin_toss, fctr): + if coin_toss in range(0, 4): + self._create_data_file(self._get_new_rndm_file_path(all_dirs), fctr) + if coin_toss in range(4, 6): + self._create_dir(self._get_new_rndm_file_path(all_dirs), fctr) + if coin_toss == 6: + all_files = _get_all_files(self.mount_pt) + self._create_new_link(all_files, all_dirs, fctr, "SYM_LINK") + if coin_toss == 7: + all_data_files = _get_all_data_files(self.mount_pt) + self._create_new_link(all_data_files, all_dirs, fctr, "HARD_LINK") + + def _logger_setup(self): + self.logger["fs_name"] = self.fs_name + self.logger["fs_type"] = self.fs_type + self.logger["save_at"] = self.save_pt + self.logger["fs_size (MB)"] = str(int(self.fs_size) >> 20) + self.logger["amount_files"] = self.n_files + self.logger["max_file_size (MB)"] = str(int(self.max_fsize) >> 20) + self.logger["files"] = {} + self.logger["files"]["init_files"] = {} + + def _get_rndm_str(self, size: int, chars=CHARSET_EASY): + self.rng.seed(self.seed) + generated_string = "".join(self.rng.choice(chars) for x in range(size)) + return generated_string + + def _get_rndm_path_from_lst(self, dirs: List, ignore_system_dirs=False): + self.rng.seed(self.seed) + rndm_idx = self.rng.randint(0, len(dirs) - 1) + if ignore_system_dirs: + if dirs[rndm_idx] not in [ + os.path.join(self.mount_pt, "lost+found"), + os.path.join(self.mount_pt, ".snap"), + ]: + return dirs[rndm_idx] + else: + logging.debug("lost+found or .snap reached, recalling method...") + return self._get_rndm_path_from_lst(dirs) + else: + return dirs[rndm_idx] + + def _get_new_rndm_file_path(self, dirs: List): + self.rng.seed(self.seed) + return os.path.join(self._get_rndm_path_from_lst(dirs), self._get_rndm_fname()) + + def _get_rndm_fname(self): + n_len = self.rng.randint(1, 255) + return self._get_rndm_str(size=n_len) + + def _create_new_link(self, files: List, dirs: List, ctr: int, ftype: str): + try: + src = self.rng.choice(files) + dst = self._get_new_rndm_file_path(dirs) + if ftype == "SYM_LINK": + self._create_symlink(src, dst) + if ftype == "HARD_LINK": + self._create_hardlink(src, dst) + self._set_logger_generic(ctr, dst) + self._set_logger_specific(ctr, ftype=ftype, src=str(src)) + except OSError: + pass + + @staticmethod + def _create_hardlink(src: str, dst: str): + os.link(src, dst) + + @staticmethod + def _create_symlink(src: str, dst: str): + os.symlink(src, dst) + + def _create_data_file(self, location: str, ctr: int): + try: + fsize = self.rng.randrange(0.25 * self.max_fsize, self.max_fsize, 50) + self._set_logger_generic(ctr, location) + self._set_logger_specific(ctr, ftype="FILE", fsize=fsize) + pathlib.Path(location).write_bytes(os.urandom(fsize)) + except OSError: + pass + + def _create_dir(self, dpath: str, ctr: int): + if not os.path.exists(dpath): + try: + _mk_dir(dpath) + self._set_logger_specific(ctr, ftype="DIR") + self._set_logger_generic(ctr, dpath) + except (OSError, BlockingIOError): + self._create_dir(dpath[-3], ctr) + + def _set_logger_generic(self, ctr: int, _path: str): + self.logger["files"][f"seed_{ctr}"]["file_name"] = str(pathlib.Path(_path).name) + self.logger["files"][f"seed_{ctr}"]["file_path"] = str(pathlib.Path(_path).parent) + self.logger["files"][f"seed_{ctr}"]["full_path"] = str(_path) + + def _set_logger_specific(self, ctr: int, ftype=None, src=None, fsize=None): + if ftype: + self.logger["files"][f"seed_{ctr}"]["file_type"] = ftype + if src: + self.logger["files"][f"seed_{ctr}"]["source"] = src + if fsize: + self.logger["files"][f"seed_{ctr}"]["file_size"] = fsize + + def _set_seed(self): + if self.mode: + self.seed = self.rng.getrandbits(random.randint(1, 1024)) + else: + self.seed = None + self.rng.seed(self.seed) + + def _set_logger_seed(self, f_ctr: int): + self.logger["files"][f"seed_{f_ctr}"] = {} + self.logger["files"][f"seed_{f_ctr}"]["seed_value"] = self.seed + + def _init_fs_dummy_data(self): + for i, v in list(enumerate(["FILE", "SYM_LINK", "DIR"])): + if self.data: + self.seed = self.data["files"]["init_files"][f"init_{i}"]["seed"] + self.rng.seed(self.seed) + else: + self._set_seed() + _name = self._get_rndm_fname() + _path = os.path.join(self.mount_pt, _name) + if "FILE" in v: + _touch_fn = _name + pathlib.Path(_path).touch() + elif "SYM_LINK" in v: + lnk_path = os.path.join(self.mount_pt, _name) + os.symlink(os.path.join(self.mount_pt, _touch_fn), lnk_path) + else: + pathlib.Path(_path).mkdir(parents=True, exist_ok=True) + self._set_logger_dummy_data(_name, _path, i, v) + if self.data: + if _name != self.data["files"]["init_files"][f"init_{i}"]["name"]: + self._shpr_dummy_sanity_check(i) + + def _shpr_dummy_sanity_check(self, ctr: int): + _data = self.data["files"]["init_files"][f"init_{ctr}"]["file_type"] + print(f"[!] Name mismatching for {_data}") + _expected = self.data["files"]["init_files"][f"init_{ctr}"]["name"] + _actual = self.logger["files"]["init_files"][f"init_{ctr}"]["name"] + print(f" Expected: {_expected}") + print(f" Got: {_actual}") + sys.exit(1) + + def _set_logger_dummy_data(self, name: str, _path: str, i: int, ftype: str): + self.logger["files"]["init_files"][f"init_{i}"] = {} + self.logger["files"]["init_files"][f"init_{i}"]["seed"] = self.seed + self.logger["files"]["init_files"][f"init_{i}"]["file_type"] = ftype + self.logger["files"]["init_files"][f"init_{i}"]["name"] = name + self.logger["files"]["init_files"][f"init_{i}"]["path"] = self.mount_pt + self.logger["files"]["init_files"][f"init_{i}"]["full_path"] = _path + if ftype == "SYM_LINK": + self.logger["files"]["init_files"][f"init_{i}"]["source"] = self.logger["files"]["init_files"]["init_0"]["full_path"] + + def _parse_opts(self): + log_data = None + parser = argparse.ArgumentParser() + parser.add_argument( + "-fs", "--filesystem", type=str, help="ext2, ext3, ext4, ufs1, ufs2, zfs, apfs", + ) + parser.add_argument( + "-s", + "--size", + type=int, + default=10, + help="Specify the size in MB of the newly created file system, (default: %(default)s)", + ) + parser.add_argument( + "-n", "--name", type=str, help="custom name you want to give the file system", + ) + parser.add_argument( + "-o", + "--output_dir", + type=str, + default="/tmp/", + help="Path to store the newly created file system, (default: %(default)s)", + ) + parser.add_argument( + "-p", "--populate", type=int, help="Number of files/directories that will be created on the fresh file system", + ) + parser.add_argument( + "-ps", "--populate_size", type=int, help="Max file size limit in KB for -p option", + ) + parser.add_argument( + "-mnt", + "--mount", + type=str, + default="/mnt/", + help="path to mount the filesystem for populating it, (default %(default)s)", + ) + parser.add_argument( + "-m", + "--mode", + type=int, + default=1, + help="1 for determinism, or 0 for random (does not use seeds and does no logging), " "(default: %(default)s)", + ) + parser.add_argument( + "-shp", + "--shaper", + action="append", + nargs=2, + help="Requires a valid json log file from the file system creation process and " + "the desired new file system size to reshape the create a new file system " + "with the same layout but of the new size!", + ) + args = parser.parse_args() + if args.shaper: + log_data = json.loads(pathlib.Path(args.shaper[0][0]).read_text()) + args.name = f"SHP_{args.shaper[0][1]}__" + log_data["fs_name"] + args.filesystem = str(log_data["fs_type"]) + args.size = int(args.shaper[0][1]) + args.populate = int(log_data["amount_files"]) + args.populate_size = int(log_data["max_file_size (MB)"]) << 10 + args.mode = 1 + args.output_dir = str(log_data["save_at"]) + if not args.size or not args.filesystem: + parser.print_help() + sys.exit(1) + if args.size < 64 and args.filesystem == "zfs": + parser.error("ZFS needs at least 64MB of disk size") + sys.exit(1) + elif args.size < 2 and args.filesystem == "ext3": + parser.error("EXT3 needs at least 2MB of disk size") + sys.exit(1) + if (args.populate and not args.populate_size) or (args.populate_size and not args.populate): + parser.error("-p and -ps depend on each other. Set both or neither of them!") + sys.exit(1) + elif args.populate_size and args.populate: + args.populate_size = args.populate_size << 10 # shift bytes into Megabytes + args.size = args.size << 20 + if args.populate and args.populate_size and (args.populate * args.populate_size > args.size): + parser.error("New file system does not hold enough free space to write all requested files!") + sys.exit(1) + if args.output_dir: + _mk_dir(args.output_dir) + else: + _mk_dir(self.save_pt) + if args.mount: + _mk_dir(args.mount) + else: + _mk_dir(self.mount_pt) + if args.mode: + self.mode = 1 + else: + self.mode = 0 + + self.__setup__( + fs_name=args.name, + fs_type=str(args.filesystem).lower(), + fs_size=args.size, + n_files=args.populate, + max_fsize=args.populate_size, + mode=args.mode, + save_pt=args.output_dir, + data=log_data, + ) + + +####################################################################################################################### +# DARTWIN SPECIFIC FILE SYSTEM CREATION STEPS # +####################################################################################################################### + + +class Darwin(GenericFilesystemCreator): + def __init__(self, fs, size, name, location, mount_pt, n_files, max_fsize, mode, save_pt): + super(Darwin, self).__init__() + self.fs_type = fs + self.fs_size = size + self.fs_name = name + self.path = location + self.dev = None + self.mount_pt = mount_pt + self.n_files = n_files + self.max_fsize = max_fsize + self.mode = mode + self.save_pt = save_pt + + def _attach_disk(self): + hdiutil_out = subprocess.check_output( + f"/usr/bin/hdiutil attach -imagekey diskimage-class=CRawDiskImage -nomount {self.path}".split(), encoding="utf-8", + ).strip() + self.dev = hdiutil_out.split()[-2].strip() # needs better sanity checks + logging.debug(f"block device {self.dev} created") + return self.dev + + def _detach_disk(self): + subprocess.call(f"/usr/bin/hdiutil detach {self.dev}".split(), stdout=subprocess.DEVNULL) + + def mk_fs(self): + if self.fs_type == "apfs": + self._mk_apfs() + self._attach_disk() + logging.debug(f"{self.fs_name} was created successfully") + + def _mk_apfs(self): + subprocess.call(f"/sbin/newfs_{self.fs_type} -v {self.fs_name} {self.path}".split()) + + def mount_fs(self): + _mk_dir(self.mount_pt) + try: + subprocess.call( + f"/sbin/mount_{self.fs_type} {self.dev} {self.mount_pt}".split(), stdout=subprocess.DEVNULL, + ) + except subprocess.CalledProcessError: + logging.error(f"Failed to mount {self.fs_name} during populating phase") + sys.exit(1) + except RuntimeError as e: + logging.error(e) + sys.exit(1) + finally: + self._detach_disk() + + def unmount_fs(self): + if self.fs_type == "apfs": + self._unmount_apfs() + + def _unmount_apfs(self): + try: + subprocess.call(f"/sbin/umount {self.dev}".split(), stdout=subprocess.DEVNULL) + except RuntimeError as e: + logging.error(e) + finally: + self._detach_disk() + + +####################################################################################################################### +# UBUNTU SPECIFIC FILE SYSTEM CREATION STEPS # +####################################################################################################################### + + +class Ubuntu(GenericFilesystemCreator): + def __init__(self, fs, size, name, location, mount_pt, n_files, max_fsize, mode, save_pt): + super(Ubuntu, self).__init__() + self.fs_type = fs + self.fs_size = size + self.fs_name = name + self.path = location + self.dev = None + self.mount_pt = mount_pt + self.n_files = n_files + self.max_fsize = max_fsize + self.mode = mode + self.save_pt = save_pt + + def _mk_blk_dev(self): + self.dev = subprocess.check_output("losetup -f".split(), encoding="utf-8").strip() + subprocess.check_output(f"losetup {self.dev} {self.path}".split(), encoding="utf-8").strip() + logging.debug(f"block device {self.dev} created") + return self.dev + + def _unmk_blk_dev(self): + subprocess.call(f"losetup -d {self.dev}".split(), stdout=subprocess.DEVNULL) + + def mk_fs(self): + self._mk_blk_dev() + if self.fs_type in ["ufs1", "ufs2"]: + self._mk_ufs() + if self.fs_type in ["ext2", "ext3", "ext4"]: + self._mk_ext() + if self.fs_type == "zfs": + self._mk_zfs() + logging.debug(f"{self.fs_name} was created successfully") + + def _mk_ufs(self): + if not _chk_availability("mkfs.ufs"): + logging.error("Could not find mkfs.ufs") + logging.error( + "Please install legacy package from:" + "\thttps://mirrors.mediatemple.net/debian-archive/debian/pool/main/u/ufsutils/ufsutils_8.2-3_amd64.deb" + ) + sys.exit(1) + if self.fs_type == "ufs1": + flag = 1 + else: + flag = 2 + # -b and -f flags ensure the same default result compared to FreeBSD + cmd = f"/sbin/mkfs.ufs -O {flag} -b 32768 -f 4096 {self.dev}" + subprocess.call(cmd.split(), close_fds=True, stdout=subprocess.DEVNULL) + print( + f"[*] The Ubuntu kernel has by default no write permissions for UFS.\n\tEmpty file system '{self.fs_name}' created." + ) + sys.exit(0) + + def _mk_ext(self): + subprocess.call( + f"/sbin/mkfs.{self.fs_type} -v {self.path}".split(), stdout=subprocess.DEVNULL, + ) + + def _mk_zfs(self): + self.fs_name = "pool_" + self.fs_name + GenericFilesystemCreator.mountAt = GenericFilesystemCreator._generic_mk_zfs(self.fs_name, self.dev) + + def mount_fs(self): + _mk_dir(self.mount_pt) + try: + subprocess.call( + f"/bin/mount -t {self.fs_type} {self.dev} {self.mount_pt}".split(), stdout=subprocess.DEVNULL, + ) + except subprocess.CalledProcessError: + logging.error(f"Failed to mount {self.fs_name} during populating phase") + self._unmk_blk_dev() + sys.exit(1) + except RuntimeError as e: + logging.error(e) + self._unmk_blk_dev() + sys.exit(1) + + def unmount_fs(self): + if self.fs_type in ["ext2", "ext3", "ext4"]: + self._unmount_ext() + if self.fs_type == "zfs": + self._unmount_zfs() + + def _unmount_ext(self): + try: + subprocess.call(f"/bin/umount {self.dev}".split(), stdout=subprocess.DEVNULL) + except RuntimeError as e: + logging.error(e) + finally: + self._unmk_blk_dev() + + def _unmount_zfs(self): + cmd_export_pool = "zpool export {}".format(self.fs_name) + try: + subprocess.call(cmd_export_pool.split(), stdout=subprocess.DEVNULL) + self._unmk_blk_dev() + except RuntimeError as e: + logging.warning(e) + sys.exit(1) + + +####################################################################################################################### +# FreeBSD SPECIFIC FILE SYSTEM CREATION STEPS # +####################################################################################################################### + + +class FreeBSD(GenericFilesystemCreator): + def __init__( + self, fs, size, name, location, mount_pt, n_files, max_fsize, mode, save_pt, log_data=None, + ): + super(FreeBSD, self).__init__() + self.fs_type = fs + self.fs_size = size + self.fs_name = name + self.path = location + self.dev = None + self.mount_pt = mount_pt + self.n_files = n_files + self.max_fsize = max_fsize + self.mode = mode + self.save_pt = save_pt + self.data = log_data + + def _mk_blk_dev(self): + dev = subprocess.check_output(f"/sbin/mdconfig -a -t vnode -f {self.path}".split(), encoding="utf-8").strip() + self.dev = os.path.join("/dev", dev) + logging.debug(f"block device {self.dev} created") + return self.dev + + def _unmk_blk_dev(self): + subprocess.call(f"/sbin/mdconfig -d -u {self.dev}".split(), stdout=subprocess.DEVNULL) + + def mk_fs(self): + self._mk_blk_dev() + if self.fs_type in ["ext2", "ext3", "ext4"]: + self._mk_ext() + if self.fs_type == "zfs": + self._mk_zfs() + if self.fs_type in ["4.3bsd", "ufs1", "ufs2"]: + self._mk_ufs() + logging.debug(f"{self.fs_name} was created successfully") + + def _mk_ufs(self): + if self.fs_type == "ufs1": + cmd = f"/sbin/newfs -O 1 {self.dev}" + else: + cmd = f"/sbin/newfs {self.dev}" + subprocess.call(cmd.split(), close_fds=True, stdout=subprocess.DEVNULL) + + def _mk_ext(self): + subprocess.call( + f"/usr/local/sbin/mkfs.{self.fs_type} -v {self.path}".split(), stdout=subprocess.DEVNULL, + ) + + def _mk_zfs(self): + self.fs_name = "pool_" + self.fs_name + GenericFilesystemCreator.mountAt = GenericFilesystemCreator._generic_mk_zfs(self.fs_name, self.dev) + + def mount_fs(self): + _mk_dir(self.mount_pt) + flag = "" + if self.fs_type in ["ext2", "ext3", "ext4"]: + flag = "ext2fs" + elif "ufs" in self.fs_type: + flag = "ufs" + if not GenericFilesystemCreator.generic_mount(flag, self.dev, self.mount_pt): + self._unmk_blk_dev() + logging.error(f"Failed to mount {self.fs_name} during populating phase") + sys.exit(1) + + def unmount_fs(self): + if self.fs_type in ["ext2", "ext3", "ext4", "ufs1", "ufs2"]: + self._unmount_ext_ufs() + if self.fs_type == "zfs": + self._unmount_zfs() + + def _unmount_ext_ufs(self): + try: + subprocess.call(f"/sbin/umount {self.dev}".split(), stdout=subprocess.DEVNULL) + except RuntimeError as e: + logging.error(e) + finally: + self._unmk_blk_dev() + + def _unmount_zfs(self): + cmd_export_pool = "zpool export {}".format(self.fs_name) + try: + subprocess.call(cmd_export_pool.split(), stdout=subprocess.DEVNULL) + self._unmk_blk_dev() + except RuntimeError as e: + logging.warning(e) + sys.exit(1) + + +####################################################################################################################### +# OpenBSD SPECIFIC FILE SYSTEM CREATION STEPS # +####################################################################################################################### + + +class OpenBSD: + def __init__(self, fs, size, name, location, mount_pt, n_files, max_fsize, mode, save_pt): + super(OpenBSD, self).__init__() + self.fs_type = fs + self.fs_size = size + self.fs_name = name + self.path = location + self.dev = None + self.mount_pt = mount_pt + self.n_files = n_files + self.max_fsize = max_fsize + self.mode = mode + self.save_pt = save_pt + + def _mk_blk_dev(self): + subprocess.check_output(f"/sbin/vnconfig vnd0 {self.path}".split(), stderr=subprocess.STDOUT, encoding="utf-8",).strip() + self.dev = ( + subprocess.check_output("/sbin/disklabel -A vnd0", stderr=subprocess.STDOUT, encoding="utf-8").split()[1][:-1].strip() + ) + logging.debug(f"block device {self.dev} created") + return self.dev + + def _unmk_blk_dev(self): + subprocess.call( + f'/sbin/vnconfig -u {self.dev.split("/")[-1]}'.split(), stdout=subprocess.DEVNULL, + ) + + def mk_fs(self): + self._mk_blk_dev() + if self.fs_type == "ext2": + self._mk_ext() + if self.fs_type in ["4.3bsd", "ufs1", "ufs2"]: + self._mk_ufs() + logging.debug(f"{self.fs_name} was created successfully") + + def _mk_ufs(self): + if self.fs_type == "4.3bsd": + cmd = f"/sbin/newfs -O 0 {self.dev}" + elif self.fs_type == "ufs1": + cmd = f"/sbin/newfs -O 1 {self.dev}" + else: + cmd = f"/sbin/newfs -O 2 {self.dev}" + subprocess.call(cmd.split(), stdout=subprocess.DEVNULL) + + def _mk_ext(self): + subprocess.call(f"/sbin/newfs_ext2fs -I {self.dev}".split(), stdout=subprocess.DEVNULL) + + def mount_fs(self): + _mk_dir(self.mount_pt) + flag = "" + if self.fs_type == "ext2": + flag = "ext2fs" + if self.fs_type in ["ufs", "4.3bsd"]: + flag = "ffs" + if not GenericFilesystemCreator.generic_mount(flag, self.dev, self.mount_pt): + self._unmk_blk_dev() + logging.error(f"Failed to mount {self.fs_name} during populating phase") + sys.exit(1) + + def unmount_fs(self): + self._unmount_ext_ufs() + + def _unmount_ext_ufs(self): + try: + subprocess.call(f"/bin/umount {self.dev}".split(), stdout=subprocess.DEVNULL) + except RuntimeError as e: + logging.error(e) + finally: + self._unmk_blk_dev() + + +####################################################################################################################### +# NetBSD SPECIFIC FILE SYSTEM CREATION STEPS # +####################################################################################################################### + + +class NetBSD: + def __init__(self, fs, size, name, location, mount_pt, n_files, max_fsize, mode, save_pt): + super(NetBSD, self).__init__() + self.fs_type = fs + self.fs_size = size + self.fs_name = name + self.path = location + self.dev = None + self.mount_pt = mount_pt + self.n_files = n_files + self.max_fsize = max_fsize + self.mode = mode + self.save_pt = save_pt + + def _mk_blk_dev(self): + _ = subprocess.check_output(f"/usr/sbin/vndconfig vnd0 {self.path}".split(), encoding="utf-8").strip() + self.dev = "/dev/vnd0" + subprocess.call(f"/sbin/disklabel {self.dev}".split(), stdout=subprocess.DEVNULL) + self.dev = "/dev/rvnd0" + logging.debug(f"block device {self.dev} created") + return self.dev + + def _unmk_blk_dev(self): + subprocess.call( + f'/usr/sbin/vndconfig -u {self.dev.split("/")[-1]}'.split(), stdout=subprocess.DEVNULL, + ) + + def mk_fs(self): + self._mk_blk_dev() + if self.fs_type in ["ext2", "ext3", "ext4"]: + self._mk_ext() + if self.fs_type in ["4.3bsd", "ufs1", "ufs2"]: + self._mk_ufs() + logging.debug(f"{self.fs_name} was created successfully") + + def _mk_ufs(self): + if self.fs_type == "4.3bsd": + cmd = f"/sbin/newfs -O 0 {self.dev}" + elif self.fs_type == "ufs1": + cmd = f"/sbin/newfs -O 1 {self.dev}" + else: + cmd = f"/sbin/newfs -O 2 {self.dev}" + subprocess.call(cmd.split(), stdout=subprocess.DEVNULL) + + def _mk_ext(self): + subprocess.call(f"/sbin/newfs_ext2fs {self.dev}".split(), stdout=subprocess.DEVNULL) + + def mount_fs(self): + _mk_dir(self.mount_pt) + flag = "" + self.dev = self.dev.translate({ord(c): None for c in "r"}) + if self.fs_type == "ext2": + flag = "ext2fs" + if self.fs_type in ["ufs", "4.3bsd"]: + flag = "ufs" + if not GenericFilesystemCreator.generic_mount(flag, self.dev, self.mount_pt): + self._unmk_blk_dev() + logging.error(f"Failed to mount {self.fs_name} during populating phase") + sys.exit(1) + + def unmount_fs(self): + self._unmount_ext_ufs() + + def _unmount_ext_ufs(self): + try: + subprocess.call(f"/bin/umount {self.dev}".split(), stdout=subprocess.DEVNULL) + except RuntimeError as e: + logging.error(e) + finally: + self._unmk_blk_dev() + + +def main(): + if os.geteuid() != 0: + print("[!] Script needs to be run as root!") + sys.exit(1) + logging.basicConfig(level="ERROR") + return GenericFilesystemCreator().mk_file_system() + + +if __name__ == "__main__": + main() diff --git a/src/run.py b/src/run.py new file mode 100644 index 0000000..7c0f968 --- /dev/null +++ b/src/run.py @@ -0,0 +1,54 @@ +import json +import logging +import subprocess +import sys + +from config import fuzzing_config + + +def build_tmux_session(): + subprocess.Popen( + "tmux new -d -s fsfuzzer", shell=True, start_new_session=True, stdout=subprocess.DEVNULL, + ) + + +def build_new_tmux_window(): + subprocess.call("tmux new-window -t fsfuzzer", shell=True) + + +def to_dict(input_ordered_dict): + return json.loads(json.dumps(input_ordered_dict)) + + +def kill_tmux(): + subprocess.call("tmux kill-session -t fsfuzzer", shell=True, stdout=subprocess.PIPE) + + +def main(): + build_tmux_session() + + for i in range(len(fuzzing_config.fuzzer)): + build_new_tmux_window() + cmd = "python3 Fuzzer/Fuzzer.py {} {} {} '{}' {} {} {} {} {}".format( + fuzzing_config.fuzzer[i]["name"], + fuzzing_config.fuzzer[i]["fs_creator_vm"], + fuzzing_config.fuzzer[i]["fuzzing_vm"], + fuzzing_config.fuzzer[i]["mutation_engine"], + fuzzing_config.fuzzer[i]["target_fs"], + fuzzing_config.fuzzer[i]["target_size"], + fuzzing_config.fuzzer[i]["populate_with_files"], + fuzzing_config.fuzzer[i]["max_file_size"], + fuzzing_config.fuzzer[i]["enable_dyn_scaling"], + ) + print(cmd) + fuzz_task = subprocess.Popen('tmux send-keys -t fsfuzzer "{}" C-m'.format(cmd), shell=True, stdout=subprocess.PIPE) + if fuzz_task.poll() is not None: + logging.debug("Failed to spawn at least one subprocess. Aborting!") + kill_tmux() + sys.exit(1) + print("\x1b[6;30;42m" + 'Attach to tmux session via "{}"!'.format("tmux attach-session -t fsfuzzer") + "\x1b[0m") + print("\x1b[6;30;42m" + "Ctrl+C to kill tmux session!" + "\x1b[0m") + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/src/scripts/fuzzer.sh b/src/scripts/fuzzer.sh new file mode 100644 index 0000000..7a4768d --- /dev/null +++ b/src/scripts/fuzzer.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env sh +# Some stuff to setup for the FreeBSD fuzzer instances.. + +pkg install -y vim python3 e2fsprogs p7zip gdb wget curl +kldload ext2fs +sed -i -e 's/#PermitRootLogin no/PermitRootLogin yes/g' /etc/ssh/sshd_config +sed -i -e 's/#PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config + +/etc/rc.d/sshd restart + +echo "kern.panic_reboot_wait_time=-1" >> /etc/sysctl.conf # Doesnt reboot on crash +# echo "kern.panic_reboot_wait_time=0" >> /etc/sysctl.conf # immediate reboot on crash +echo "vm.redzone.panic=1" >> /etc/sysctl.conf \ No newline at end of file diff --git a/src/scripts/kern.diff b/src/scripts/kern.diff new file mode 100644 index 0000000..3098f35 --- /dev/null +++ b/src/scripts/kern.diff @@ -0,0 +1,204 @@ +1,19d0 +< # +< # GENERIC -- Generic kernel configuration file for FreeBSD/amd64 +< # +< # For more information on this file, please read the config(5) manual page, +< # and/or the handbook section on Kernel Configuration Files: +< # +< # https://www.FreeBSD.org/doc/en_US.ISO8859-1/books/handbook/kernelconfig-config.html +< # +< # The handbook is also available locally in /usr/share/doc/handbook +< # if you've installed the doc distribution, otherwise always see the +< # FreeBSD World Wide Web server (https://www.FreeBSD.org/) for the +< # latest information. +< # +< # An exhaustive list of options and more detailed explanations of the +< # device lines is also present in the ../../conf/NOTES and NOTES files. +< # If you are in doubt as to the purpose or necessity of a line, check first +< # in NOTES. +< # +< # $FreeBSD: releng/12.1/sys/amd64/conf/GENERIC 346179 2019-04-13 08:52:52Z dim $ +90a72,81 +> # ADDED_START +> options DDB +> options KDB_UNATTENDED +> # options DDB_NUMSYM +> options INVARIANTS +> options INVARIANT_SUPPORT +> options DIAGNOSTIC +> options DEBUG_REDZONE +> #options PANIC_REBOOT_WAIT_TIME=0 +> # ADDED_END +91a83 +> +112,114d103 +< # Floppy drives +< device fdc +< +121,136d109 +< # SCSI Controllers +< device ahc # AHA2940 and onboard AIC7xxx devices +< device ahd # AHA39320/29320 and onboard AIC79xx devices +< device esp # AMD Am53C974 (Tekram DC-390(T)) +< device hptiop # Highpoint RocketRaid 3xxx series +< device isp # Qlogic family +< #device ispfw # Firmware for QLogic HBAs- normally a module +< device mpt # LSI-Logic MPT-Fusion +< device mps # LSI-Logic MPT-Fusion 2 +< device mpr # LSI-Logic MPT-Fusion 3 +< #device ncr # NCR/Symbios Logic +< device sym # NCR/Symbios Logic (newer chipsets + those of `ncr') +< device trm # Tekram DC395U/UW/F DC315U adapters +< device isci # Intel C600 SAS controller +< device ocs_fc # Emulex FC adapters +< +147,175d119 +< # RAID controllers interfaced to the SCSI subsystem +< device amr # AMI MegaRAID +< device arcmsr # Areca SATA II RAID +< device ciss # Compaq Smart RAID 5* +< device dpt # DPT Smartcache III, IV - See NOTES for options +< device hptmv # Highpoint RocketRAID 182x +< device hptnr # Highpoint DC7280, R750 +< device hptrr # Highpoint RocketRAID 17xx, 22xx, 23xx, 25xx +< device hpt27xx # Highpoint RocketRAID 27xx +< device iir # Intel Integrated RAID +< device ips # IBM (Adaptec) ServeRAID +< device mly # Mylex AcceleRAID/eXtremeRAID +< device twa # 3ware 9000 series PATA/SATA RAID +< device smartpqi # Microsemi smartpqi driver +< device tws # LSI 3ware 9750 SATA+SAS 6Gb/s RAID controller +< +< # RAID controllers +< device aac # Adaptec FSA RAID +< device aacp # SCSI passthrough for aac (requires CAM) +< device aacraid # Adaptec by PMC RAID +< device ida # Compaq Smart RAID +< device mfi # LSI MegaRAID SAS +< device mlx # Mylex DAC960 family +< device mrsas # LSI/Avago MegaRAID SAS/SATA, 6Gb/s and 12Gb/s +< device pmspcv # PMC-Sierra SAS/SATA Controller driver +< #XXX pointer/int warnings +< #device pst # Promise Supertrak SX6000 +< device twe # 3ware ATA RAID +< +180,186d123 +< # atkbdc0 controls both the keyboard and the PS/2 mouse +< device atkbdc # AT keyboard controller +< device atkbd # AT keyboard +< device psm # PS/2 mouse +< +< device kbdmux # keyboard multiplexer +< +203,211d139 +< # PCCARD (PCMCIA) support +< # PCMCIA and cardbus bridge support +< device cbb # cardbus (yenta) bridge +< device pccard # PC Card (16-bit) bus +< device cardbus # CardBus (32-bit) bus +< +< # Serial (COM) ports +< device uart # Generic UART driver +< +215d142 +< device lpt # Printer +217d143 +< #device vpo # Requires scbus and da +219d144 +< device puc # Multi I/O cards and multi-channel UARTs +224,228d148 +< device ix # Intel PRO/10GbE PCIE PF Ethernet +< device ixv # Intel PRO/10GbE PCIE VF Ethernet +< device ixl # Intel 700 Series Physical Function +< device iavf # Intel Adaptive Virtual Function +< device vmx # VMware VMXNET3 Ethernet +230,302d149 +< # PCI Ethernet NICs. +< device bxe # Broadcom NetXtreme II BCM5771X/BCM578XX 10GbE +< device de # DEC/Intel DC21x4x (``Tulip'') +< device le # AMD Am7900 LANCE and Am79C9xx PCnet +< device ti # Alteon Networks Tigon I/II gigabit Ethernet +< device txp # 3Com 3cR990 (``Typhoon'') +< device vx # 3Com 3c590, 3c595 (``Vortex'') +< +< # PCI Ethernet NICs that use the common MII bus controller code. +< # NOTE: Be sure to keep the 'device miibus' line in order to use these NICs! +< device miibus # MII bus support +< device ae # Attansic/Atheros L2 FastEthernet +< device age # Attansic/Atheros L1 Gigabit Ethernet +< device alc # Atheros AR8131/AR8132 Ethernet +< device ale # Atheros AR8121/AR8113/AR8114 Ethernet +< device bce # Broadcom BCM5706/BCM5708 Gigabit Ethernet +< device bfe # Broadcom BCM440x 10/100 Ethernet +< device bge # Broadcom BCM570xx Gigabit Ethernet +< device cas # Sun Cassini/Cassini+ and NS DP83065 Saturn +< device dc # DEC/Intel 21143 and various workalikes +< device et # Agere ET1310 10/100/Gigabit Ethernet +< device fxp # Intel EtherExpress PRO/100B (82557, 82558) +< device gem # Sun GEM/Sun ERI/Apple GMAC +< device hme # Sun HME (Happy Meal Ethernet) +< device jme # JMicron JMC250 Gigabit/JMC260 Fast Ethernet +< device lge # Level 1 LXT1001 gigabit Ethernet +< device msk # Marvell/SysKonnect Yukon II Gigabit Ethernet +< device nfe # nVidia nForce MCP on-board Ethernet +< device nge # NatSemi DP83820 gigabit Ethernet +< device pcn # AMD Am79C97x PCI 10/100 (precedence over 'le') +< device re # RealTek 8139C+/8169/8169S/8110S +< device rl # RealTek 8129/8139 +< device sf # Adaptec AIC-6915 (``Starfire'') +< device sge # Silicon Integrated Systems SiS190/191 +< device sis # Silicon Integrated Systems SiS 900/SiS 7016 +< device sk # SysKonnect SK-984x & SK-982x gigabit Ethernet +< device ste # Sundance ST201 (D-Link DFE-550TX) +< device stge # Sundance/Tamarack TC9021 gigabit Ethernet +< device tl # Texas Instruments ThunderLAN +< device tx # SMC EtherPower II (83c170 ``EPIC'') +< device vge # VIA VT612x gigabit Ethernet +< device vr # VIA Rhine, Rhine II +< device wb # Winbond W89C840F +< device xl # 3Com 3c90x (``Boomerang'', ``Cyclone'') +< +< # Wireless NIC cards +< device wlan # 802.11 support +< options IEEE80211_DEBUG # enable debug msgs +< options IEEE80211_AMPDU_AGE # age frames in AMPDU reorder q's +< options IEEE80211_SUPPORT_MESH # enable 802.11s draft support +< device wlan_wep # 802.11 WEP support +< device wlan_ccmp # 802.11 CCMP support +< device wlan_tkip # 802.11 TKIP support +< device wlan_amrr # AMRR transmit rate control algorithm +< device an # Aironet 4500/4800 802.11 wireless NICs. +< device ath # Atheros NICs +< device ath_pci # Atheros pci/cardbus glue +< device ath_hal # pci/cardbus chip support +< options AH_SUPPORT_AR5416 # enable AR5416 tx/rx descriptors +< options AH_AR5416_INTERRUPT_MITIGATION # AR5416 interrupt mitigation +< options ATH_ENABLE_11N # Enable 802.11n support for AR5416 and later +< device ath_rate_sample # SampleRate tx rate control for ath +< #device bwi # Broadcom BCM430x/BCM431x wireless NICs. +< #device bwn # Broadcom BCM43xx wireless NICs. +< device ipw # Intel 2100 wireless NICs. +< device iwi # Intel 2200BG/2225BG/2915ABG wireless NICs. +< device iwn # Intel 4965/1000/5000/6000 wireless NICs. +< device malo # Marvell Libertas wireless NICs. +< device mwl # Marvell 88W8363 802.11n wireless NICs. +< device ral # Ralink Technology RT2500 wireless NICs. +< device wi # WaveLAN/Intersil/Symbol 802.11 wireless NICs. +< device wpi # Intel 3945ABG wireless NICs. +< +330,344d176 +< +< # Sound support +< device sound # Generic sound driver (required) +< device snd_cmi # CMedia CMI8338/CMI8738 +< device snd_csa # Crystal Semiconductor CS461x/428x +< device snd_emu10kx # Creative SoundBlaster Live! and Audigy +< device snd_es137x # Ensoniq AudioPCI ES137x +< device snd_hda # Intel High Definition Audio +< device snd_ich # Intel, NVidia and other ICH AC'97 Audio +< device snd_via8233 # VIA VT8233x Audio +< +< # MMC/SD +< device mmc # MMC/SD bus +< device mmcsd # MMC/SD memory card +< device sdhci # Generic PCI SD Host Controller diff --git a/src/scripts/loader.conf b/src/scripts/loader.conf new file mode 100644 index 0000000..f01e728 --- /dev/null +++ b/src/scripts/loader.conf @@ -0,0 +1 @@ +autoboot_delay='1' diff --git a/src/scripts/make_kern.sh b/src/scripts/make_kern.sh new file mode 100755 index 0000000..6a6f193 --- /dev/null +++ b/src/scripts/make_kern.sh @@ -0,0 +1,4 @@ +#!/usr/bin/env sh +cd /usr/src +make -j4 buildkernel KERNCONF=CUSTOM +make installkernel KERNCONF=CUSTOM diff --git a/src/scripts/prepBSD_FSmakerVM.sh b/src/scripts/prepBSD_FSmakerVM.sh new file mode 100755 index 0000000..96c38d7 --- /dev/null +++ b/src/scripts/prepBSD_FSmakerVM.sh @@ -0,0 +1,18 @@ +#!/usr/bin/env sh + +pkg install -y vim python3 e2fsprogs p7zip +kldload ext2fs +# Needs to be run as root on the FreeBSD VMs since we require root privs via ssh +sed -i -e 's/#PermitRootLogin no/PermitRootLogin yes/g' /etc/ssh/sshd_config +sed -i -e 's/#PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config +sed -i -e 's/#PermitEmptyPasswords no/PermitEmptyPasswords yes/g' /etc/ssh/sshd_config +/etc/rc.d/sshd restart + +echo "tmpfs_load='YES'" >> /boot/loader.conf +echo "tmpfs /tmp tmpfs rw,mode=1777 0 0" >> /etc/fstab +# NOTE: To use /tmp as a tmpfs in memory partition for performance speed ups we have to either: +# 1. echo "tmpfs_load='YES'" >> /boot/loader.conf, or +# 2. add options TMPFS to the Kernel file and recompile it +# Afterwards we can add tmpfs /tmp tmpfs rw,mode=1777 0 0 in /etc/fstab +# Source: https://www.chruetertee.ch/blog/archive/2007/08/28/ram-disk-mit-tmpfs-auf-freebsd-erstellen.html +# Source2: Alternatively mdmfs: https://www.freebsd.org/doc/handbook/disks-virtual.html diff --git a/src/scripts/prepBSD_fuzzVM.sh b/src/scripts/prepBSD_fuzzVM.sh new file mode 100644 index 0000000..37afe5d --- /dev/null +++ b/src/scripts/prepBSD_fuzzVM.sh @@ -0,0 +1,29 @@ +#!/usr/bin/env sh + +pkg install -y vim python3 e2fsprogs p7zip gdb +kldload ext2fs +# Needs to be run as root on the FreeBSD VMs since we require root privs via ssh +sed -i -e 's/#PermitRootLogin no/PermitRootLogin yes/g' /etc/ssh/sshd_config +sed -i -e 's/#PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config +sed -i -e 's/#PermitEmptyPasswords no/PermitEmptyPasswords yes/g' /etc/ssh/sshd_config + +/etc/rc.d/sshd restart + +echo "kern.panic_reboot_wait_time=-1" >> /etc/sysctl.conf +echo "vm.redzone.panic=1" >> /etc/sysctl.conf + +# https://gist.github.com/bijanebrahimi/f2eb0c620d81aa6234e121a0ddd88cc2 +echo "options DDB" >> /usr/src/sys/amd64/conf/GENERIC +echo "options KDB" >> /usr/src/sys/amd64/conf/GENERIC +echo "options KDB_TRACE" >> /usr/src/sys/amd64/conf/GENERIC +# echo "options KDB_UNATTENDED" >> /usr/src/sys/amd64/conf/GENERIC +echo "options INVARIANTS" >> /usr/src/sys/amd64/conf/GENERIC +echo "options INVARIANT_SUPPORT" >> /usr/src/sys/amd64/conf/GENERIC +echo "options DIAGNOSTIC" >> /usr/src/sys/amd64/conf/GENERIC +echo "options DEBUG_REDZONE" >> /usr/src/sys/amd64/conf/GENERIC +echo "options PANIC_REBOOT_WAIT_TIME=0" >> /usr/src/sys/amd64/conf/GENERIC +cd /usr/src/ || exit +# -DKERNFAST +make -j4 buildkernel KERNCONF=GENERIC +make installkernel KERNCONF=GENERIC +# kgdb /boot/kernel/kernel /var/crash/vmcore. diff --git a/src/scripts/prepLinux_VM.sh b/src/scripts/prepLinux_VM.sh new file mode 100644 index 0000000..ade1227 --- /dev/null +++ b/src/scripts/prepLinux_VM.sh @@ -0,0 +1,18 @@ +#!/bin/bash +set -e + +sudo apt update +sudo apt upgrade -y +sudo apt-get install -yqq linux-crashdump python3-dev python3-pip zfsutils-linux file p7zip-full openssh-server vim +# systemd specific solution for tmpfs mounting! +sudo ln -s /usr/share/systemd/tmp.mount /etc/systemd/system/tmp.mount +sudo systemctl enable tmp.mount +sudo systemctl start tmp.mount +sed -i -e 's/#Port 22/Port 22/g' /etc/ssh/sshd_config +sudo ufw allow 22 +sudo systemctl restart ssh + +echo "panic=0" >> /etc/sysctl.conf +echo "kernel.core_pattern=/var/crash/core.%t.%p" >> /etc/sysctl.conf +echo "kernel.panic=10" >> /etc/sysctl.conf +echo "kernel.unknown_nmi_panic=1" >> /etc/sysctl.conf \ No newline at end of file diff --git a/src/scripts/rc.conf b/src/scripts/rc.conf new file mode 100644 index 0000000..1856642 --- /dev/null +++ b/src/scripts/rc.conf @@ -0,0 +1,5 @@ +hostname="" +keymap="us.kbd" +ifconfig_em0="DHCP" +sshd_enable="YES" +dumpdev="AUTO" diff --git a/src/scripts/sysctl.conf b/src/scripts/sysctl.conf new file mode 100644 index 0000000..324ff68 --- /dev/null +++ b/src/scripts/sysctl.conf @@ -0,0 +1,2 @@ +kern.panic_reboot_wait_time=0 +vm.redzone.panic=1 diff --git a/src/utility/__init__.py b/src/utility/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/utility/_unused/__init__.py b/src/utility/_unused/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/utility/_unused/find_latest_core.py b/src/utility/_unused/find_latest_core.py new file mode 100644 index 0000000..fb27b03 --- /dev/null +++ b/src/utility/_unused/find_latest_core.py @@ -0,0 +1,20 @@ +import os +import sys +import glob + + +def find_latest_core(): + # find /var/crash -name "core*" -print0 | xargs -0 ls -t | head -n1 + list_of_files = glob.glob("/var/crash/*") + list_of_files = [file for file in list_of_files if file.startswith("/var/crash/core")] + latest_file = max(list_of_files, key=os.path.getctime) + return latest_file + + +def main(): + f = find_latest_core() + print(f) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/src/utility/_unused/sha256sum.py b/src/utility/_unused/sha256sum.py new file mode 100644 index 0000000..c41fc14 --- /dev/null +++ b/src/utility/_unused/sha256sum.py @@ -0,0 +1,34 @@ +import sys +import hashlib + + +def pure_trace(core_dump): + with open(core_dump, "r") as f: + data = f.read() + panic_name = data.split("panic:")[1].split(":")[0].strip().split("\n")[0].strip() + pure_stack_backtrace = data.split("KDB: stack backtrace:")[1].split("Uptime:")[0].strip() + rem_noise = "" + for line in pure_stack_backtrace.split("\n"): + rem_noise += line.split("at")[1].lstrip() + "\n" + # print(rem_noise) + return panic_name, rem_noise + + +def write_sum(return_val): + with open("/var/crash/sha256sum.txt", "w") as f: + f.write("; ".join(return_val)) + + +def main(): + """ + Creates a sha256 hexdigest of the pure stack backtrace functions+offsets without any noise + """ + panic, backtrace = pure_trace(sys.argv[1]) + return_val = list() + return_val.append(panic) + return_val.append((hashlib.sha256(backtrace.encode()).hexdigest())) + write_sum(return_val) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/src/utility/extract_core_features.py b/src/utility/extract_core_features.py new file mode 100755 index 0000000..a8e1b0a --- /dev/null +++ b/src/utility/extract_core_features.py @@ -0,0 +1,58 @@ +#!/usr/bin/env python3 + +import hashlib +import re +import sys + + +def get_panic_name(data): + return ( + str(data) + .split("panic:")[1] + .split(":")[0] + .split("(")[0] + .split("bp")[0] + .split("fip")[0] + .split("\\")[0] + .split(", addr:")[0] + .strip() + .replace(" ", "_") + .split("_/")[0] + ) + + +def get_core_details(data): + full_strace = ( + str(data) + .split("KDB: stack backtrace:")[1] + .split("--- syscall")[0] + .split("Uptime")[0] + .replace("\\", "\n") + .replace("\nn", "\n") + .strip() + ) + clean_strace = "" + for line in full_strace.split("\n"): + if re.match(r"---\strap\s", line): + continue + if re.match(r"#[0-9]{1,3}\s0x[0-9a-f]{0,16}\sat\s", line): + clean_strace += line.split(" at ")[1] + "\n" + else: + clean_strace += line.split("/frame")[0] + "\n" + return clean_strace + + +def get_sha256_sum(sanitized_stack_trace): + return hashlib.sha256(sanitized_stack_trace.encode()).hexdigest() + + +def main(): + with open(sys.argv[1], "rb") as f: + data = f.read() + + clean_stack_trace = get_core_details(data) + print(get_sha256_sum(clean_stack_trace)) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/src/utility/file_traversal.py b/src/utility/file_traversal.py new file mode 100644 index 0000000..4bfee52 --- /dev/null +++ b/src/utility/file_traversal.py @@ -0,0 +1,65 @@ +import os +import pathlib +import sys + + +def get_all_dirs_in_a_path(dir_path): + only_dirs = "" + for f in os.scandir(dir_path): + if f.is_dir(): + only_dirs += ", " + str(f.path) + only_dirs += ", " + str(dir_path) + return only_dirs.lstrip(",").lstrip() + + +def get_all_files_in_a_path(dir_path): + all_files = "" + for path, subdirs, files in os.walk(dir_path): + for name in files: + all_files += ", " + str(pathlib.PurePath(path, name)) + for subs in subdirs: + all_files += ", " + str(pathlib.PurePath(path, subs)) + return all_files.lstrip(",").lstrip() + + +def get_only_files_in_a_path(dir_path): + only_files = "" + for path, subdirs, files in os.walk(dir_path): + for name in files: + only_files += ", " + str(pathlib.PurePath(path, name)) + return only_files.lstrip(",").lstrip() + + +def get_all_links_in_a_path(dir_path): + all_links = "" + for path, subdirs, files in os.walk(dir_path): + for name in files: + full_path = pathlib.Path(path, name) + if pathlib.Path.is_symlink(full_path): + all_links += ", " + str(full_path) + return all_links.lstrip(",").lstrip() + + +def main(): + results = "" + try: + if sys.argv[2] == "all": + results = get_all_dirs_in_a_path(sys.argv[1]) + results += " {}".format(get_all_files_in_a_path(sys.argv[1])) + results += " {}".format(get_only_files_in_a_path(sys.argv[1])) + results += " {}".format(get_all_links_in_a_path(sys.argv[1])) + elif sys.argv[2] == "dir": + results = get_all_dirs_in_a_path(sys.argv[1]) + elif sys.argv[2] == "files": + results += get_all_files_in_a_path(sys.argv[1]) + elif sys.argv[2] == "file": + results += get_only_files_in_a_path(sys.argv[1]) + elif sys.argv[2] == "link": + results += get_all_links_in_a_path(sys.argv[1]) + print(results) + except FileNotFoundError: + pass + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/src/utility/get_users_and_groups.py b/src/utility/get_users_and_groups.py new file mode 100644 index 0000000..3c0affb --- /dev/null +++ b/src/utility/get_users_and_groups.py @@ -0,0 +1,32 @@ +import grp +import pwd +import sys + + +def get_groups(): + groups = "" + for group in grp.getgrall(): + groups += ", " + group[0] + return groups.lstrip(",").lstrip() + + +def get_users(): + users = "" + for user in pwd.getpwall(): + users += ", " + user[0] + return users.lstrip(",").lstrip() + + +def main(): + """ + Fetches the Users and Groups located on a system + """ + grps = get_groups() + usrs = get_users() + result = usrs + " " + grps + print(result) + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/src/utility/test_core.txt b/src/utility/test_core.txt new file mode 100644 index 0000000..9cef498 --- /dev/null +++ b/src/utility/test_core.txt @@ -0,0 +1,1740 @@ + dumped core - see /var/crash/vmcore.0 + +Sat Mar 16 04:01:57 CET 2019 + +FreeBSD 12.0-RELEASE FreeBSD 12.0-RELEASE GENERIC amd64 + +panic: page fault + +GNU gdb 6.1.1 [FreeBSD] +Copyright 2004 Free Software Foundation, Inc. +GDB is free software, covered by the GNU General Public License, and you are +welcome to change it and/or distribute copies of it under certain conditions. +Type "show copying" to see the conditions. +There is absolutely no warranty for GDB. Type "show warranty" for details. +This GDB was configured as "amd64-marcel-freebsd"... + +Unread portion of the kernel message buffer: + + +Fatal trap 12: page fault while in kernel mode +cpuid = 1; apic id = 01 +fault virtual address = 0xfffff7fe9a87894c +fault code = supervisor write data, page not present +instruction pointer = 0x20:0xffffffff8282e56c +stack pointer = 0x28:0xfffffe001b81d5d0 +frame pointer = 0x28:0xfffffe001b81d630 +code segment = base 0x0, limit 0xfffff, type 0x1b + = DPL 0, pres 1, long 1, def32 0, gran 1 +processor eflags = interrupt enabled, resume, IOPL = 0 +current process = 1946 (cp) +trap number = 12 +panic: page fault +cpuid = 1 +time = 1552705261 +KDB: stack backtrace: +db_trace_self_wrapper() at db_trace_self_wrapper+0x2b/frame 0xfffffe001b81d280 +vpanic() at vpanic+0x1a3/frame 0xfffffe001b81d2e0 +panic() at panic+0x43/frame 0xfffffe001b81d340 +trap_fatal() at trap_fatal+0x35f/frame 0xfffffe001b81d390 +trap_pfault() at trap_pfault+0x49/frame 0xfffffe001b81d3f0 +trap() at trap+0x2ba/frame 0xfffffe001b81d500 +calltrap() at calltrap+0x8/frame 0xfffffe001b81d500 +--- trap 0xc, rip = 0xffffffff8282e56c, rsp = 0xfffffe001b81d5d0, rbp = 0xfffffe001b81d630 --- +ext2_vget() at ext2_vget+0x2ec/frame 0xfffffe001b81d630 +ext2_valloc() at ext2_valloc+0x501/frame 0xfffffe001b81d6c0 +ext2_mkdir() at ext2_mkdir+0x80/frame 0xfffffe001b81d740 +VOP_MKDIR_APV() at VOP_MKDIR_APV+0x9e/frame 0xfffffe001b81d770 +kern_mkdirat() at kern_mkdirat+0x1be/frame 0xfffffe001b81d980 +amd64_syscall() at amd64_syscall+0x28d/frame 0xfffffe001b81dab0 +fast_syscall_common() at fast_syscall_common+0x101/frame 0xfffffe001b81dab0 +--- syscall (136, FreeBSD ELF64, sys_mkdir), rip = 0x8003fd55a, rsp = 0x7fffffffe6b8, rbp = 0x7fffffffe7f0 --- +Uptime: 2m5s +Dumping 157 out of 2009 MB:..11%..21%..31%..41%..51%..62%..72%..82%..92% + +Reading symbols from /boot/kernel/intpm.ko...Reading symbols from /usr/lib/debug//boot/kernel/intpm.ko.debug...done. +done. +Loaded symbols for /boot/kernel/intpm.ko +Reading symbols from /boot/kernel/smbus.ko...Reading symbols from /usr/lib/debug//boot/kernel/smbus.ko.debug...done. +done. +Loaded symbols for /boot/kernel/smbus.ko +Reading symbols from /boot/kernel/ext2fs.ko...Reading symbols from /usr/lib/debug//boot/kernel/ext2fs.ko.debug...done. +done. +Loaded symbols for /boot/kernel/ext2fs.ko +#0 doadump (textdump=1) at pcpu.h:230 +230 pcpu.h: No such file or directory. + in pcpu.h +(kgdb) #0 doadump (textdump=1) at pcpu.h:230 +#1 0xffffffff80b79b60 in kern_reboot (howto=260) + at /usr/src/sys/kern/kern_shutdown.c:446 +#2 0xffffffff80b79fb3 in vpanic (fmt=, + ap=) at /usr/src/sys/kern/kern_shutdown.c:872 +#3 0xffffffff80b79d13 in panic (fmt=) + at /usr/src/sys/kern/kern_shutdown.c:799 +#4 0xffffffff8104c18f in trap_fatal (frame=0xfffffe001b81d510, + eva=18446735271619168588) at /usr/src/sys/amd64/amd64/trap.c:929 +#5 0xffffffff8104c1e9 in trap_pfault (frame=0xfffffe001b81d510, usermode=0) + at pcpu.h:230 +#6 0xffffffff8104b82a in trap (frame=0xfffffe001b81d510) + at /usr/src/sys/amd64/amd64/trap.c:441 +#7 0xffffffff810265c5 in calltrap () + at /usr/src/sys/amd64/amd64/exception.S:232 +#8 0xffffffff8282e56c in ext2_vget (mp=0xfffff8002f9e9000, ino=1933, + flags=, vpp=0xfffffe001b81d6f0) + at /usr/src/sys/fs/ext2fs/ext2_vfsops.c:1062 +#9 0xffffffff8281efc1 in ext2_valloc (pvp=0xfffff8002f57d1e0, + mode=, cred=0xfffff8002f232100, + vpp=0xfffffe001b81d6f0) at /usr/src/sys/fs/ext2fs/ext2_alloc.c:410 +#10 0xffffffff82830f70 in ext2_mkdir (ap=0xfffffe001b81d910) + at /usr/src/sys/fs/ext2fs/ext2_vnops.c:1315 +#11 0xffffffff811d3d6e in VOP_MKDIR_APV (vop=0xffffffff82833838, + a=0xfffffe001b81d910) at vnode_if.c:1610 +#12 0xffffffff80c5518e in kern_mkdirat (td=0xfffff8002f9e5580, fd=-100, + path=0x206030
    , segflg=UIO_USERSPACE, + mode=16877) at vnode_if.h:665 +#13 0xffffffff8104cbcd in amd64_syscall (td=0xfffff8002f9e5580, traced=0) + at subr_syscall.c:135 +#14 0xffffffff81026ead in fast_syscall_common () + at /usr/src/sys/amd64/amd64/exception.S:504 +#15 0x00000008003fd55a in ?? () +Previous frame inner to this frame (corrupt stack?) +Current language: auto; currently minimal +(kgdb) + +------------------------------------------------------------------------ +ps -axlww + +UID PID PPID CPU PRI NI VSZ RSS MWCHAN STAT TT TIME COMMAND + 0 0 0 0 -16 0 0 0 swapin DLs - 0:00.02 [kernel] + 0 1 0 0 20 0 9952 1000 wait DLs - 0:00.01 [init] + 0 2 0 0 -16 0 0 0 crypto_w DL - 0:00.00 [crypto] + 0 3 0 0 -16 0 0 0 crypto_r DL - 0:00.00 [crypto returns 0] + 0 4 0 0 -16 0 0 0 crypto_r DL - 0:00.00 [crypto returns 1] + 0 5 0 0 -16 0 0 0 - RL - 0:00.18 [cam] + 0 6 0 0 -16 0 0 0 - DL - 0:00.00 [soaiod1] + 0 7 0 0 -16 0 0 0 - DL - 0:00.00 [soaiod2] + 0 8 0 0 -16 0 0 0 - DL - 0:00.00 [soaiod3] + 0 9 0 0 -16 0 0 0 - DL - 0:00.00 [soaiod4] + 0 10 0 0 -16 0 0 0 audit_wo DL - 0:00.00 [audit] + 0 11 0 0 155 0 0 0 - RL - 0:18.34 [idle] + 0 12 0 0 -52 0 0 0 - WL - 0:00.38 [intr] + 0 13 0 0 -8 0 0 0 - DL - 0:00.04 [geom] + 0 14 0 0 -16 0 0 0 seqstate DL - 0:00.00 [sequencer 00] + 0 15 0 0 -68 0 0 0 - DL - 0:00.00 [usb] + 0 16 0 0 -16 0 0 0 waiting_ DL - 0:00.00 [sctp_iterator] + 0 17 0 0 -16 0 0 0 - DL - 0:00.00 [rand_harvestq] + 0 18 0 0 -16 0 0 0 psleep DL - 0:00.01 [pagedaemon] + 0 19 0 0 -16 0 0 0 psleep DL - 0:00.00 [vmdaemon] + 0 20 0 0 -16 0 0 0 qsleep DL - 0:00.01 [bufdaemon] + 0 21 0 0 -16 0 0 0 vlruwt DL - 0:00.00 [vnlru] + 0 22 0 0 16 0 0 0 syncer DL - 0:00.00 [syncer] + 0 355 1 0 52 0 11352 2588 select Ds - 0:00.00 [dhclient] + 0 358 1 0 52 0 11572 2720 select Ds - 0:00.00 [dhclient] + 65 405 1 0 52 0 11740 2840 select DCs - 0:00.00 [dhclient] + 0 406 1 0 20 0 10480 1432 select Ds - 0:00.00 [devd] + 0 549 1 0 20 0 11372 2636 select Ds - 0:00.01 [syslogd] + 0 731 1 0 20 0 19580 7896 select Ds - 0:00.00 [sshd] + 0 734 1 0 20 0 16916 6928 select Ds - 0:00.00 [sendmail] + 25 737 1 0 52 0 16616 6684 pause Ds - 0:00.00 [sendmail] + 0 741 1 0 20 0 11384 2604 nanslp Ds - 0:00.00 [cron] + 0 791 1 0 52 0 10848 2248 ttyin Ds+ - 0:00.00 [getty] + 0 792 1 0 52 0 10848 2248 ttyin Ds+ - 0:00.00 [getty] + 0 793 1 0 52 0 10848 2248 ttyin Ds+ - 0:00.00 [getty] + 0 794 1 0 52 0 10848 2248 ttyin Ds+ - 0:00.00 [getty] + 0 795 1 0 52 0 10848 2248 ttyin Ds+ - 0:00.00 [getty] + 0 796 1 0 52 0 10848 2248 ttyin Ds+ - 0:00.00 [getty] + 0 797 1 0 52 0 10848 2248 ttyin Ds+ - 0:00.00 [getty] + 0 798 1 0 52 0 10848 2248 ttyin Ds+ - 0:00.00 [getty] + 0 801 731 0 52 0 25184 13804 select Ds - 0:00.00 [sshd] + 0 1832 0 0 -8 0 0 0 mdwait DL - 0:00.00 [md0] + 0 1944 801 0 52 0 12200 3264 pause Ds+ - 0:00.01 [csh] + 0 1946 1944 0 72 0 11844 2156 - R+ - 0:00.00 [cp] + +------------------------------------------------------------------------ +vmstat -s + + 289456 cpu context switches + 65626 device interrupts + 2366 software interrupts + 755792 traps + 1315463 system calls + 28 kernel threads created + 1696 fork() calls + 220 vfork() calls + 2 rfork() calls + 0 swap pager pageins + 0 swap pager pages paged in + 0 swap pager pageouts + 0 swap pager pages paged out + 1095 vnode pager pageins + 8278 vnode pager pages paged in + 0 vnode pager pageouts + 0 vnode pager pages paged out + 0 page daemon wakeups + 0 pages examined by the page daemon + 0 clean page reclamation shortfalls + 0 pages reactivated by the page daemon + 133698 copy-on-write faults + 27 copy-on-write optimized faults + 605321 zero fill pages zeroed + 0 zero fill pages prezeroed + 15 intransit blocking page faults + 799926 total VM faults taken + 950 page faults requiring I/O + 0 pages affected by kernel thread creation + 104654 pages affected by fork() + 7911 pages affected by vfork() + 114 pages affected by rfork() + 882958 pages freed + 0 pages freed by daemon + 0 pages freed by exiting processes + 0 pages active + 0 pages inactive + 0 pages in the laundry queue + 0 pages wired down + 0 pages free + 0 bytes per page + 0 total name lookups + cache hits (0% pos + 0% neg) system 0% per-directory + deletions 0%, falsehits 0%, toolong 0% + +------------------------------------------------------------------------ +vmstat -m + + Type InUse MemUse HighUse Requests Size(s) + CAM DEV 5 20K - 11 4096 + CAM CCB 0 0K - 8207 4096 + CAM path 7 4K - 46 512 + CAM periph 6 3K - 69 512,1024 + feeder 7 4K - 7 512 +CAM I/O Scheduler 1 1K - 1 512 + CAM queue 8 12K - 28 512,2048 + UART 3 5K - 3 512,2048 + scsi_cd 0 0K - 6 512 + USB 24 44K - 24 512,1024,8192 + USBdev 20 10K - 20 512 +CAM dev queue 3 2K - 3 512 + ata_pci 1 1K - 1 512 + vtbuf 24 2064K - 46 8192 + vt 11 11K - 11 1024 + DEVFS3 111 56K - 1529 512 + DEVFS1 91 91K - 455 1024 + DEVFS_RULE 56 54K - 56 512,1024 + DEVFS 14 7K - 15 512 + DEVFSP 2 1K - 2 512 +NFSD V4client 1 1K - 1 512 + NFSD lckfile 1 1K - 1 512 + NFSD session 1 2K - 1 2048 + pfs_nodes 20 10K - 20 512 + GEOM 69 39K - 1194 512,1024,2048,4096,8192,16384,32768 + raid_data 0 0K - 162 512 + isadev 7 4K - 7 512 + ddb_capture 1 64K - 1 65536 + cdev 4 2K - 4 512 + filedesc 1 8K - 1 8192 + sigio 0 0K - 1 512 + filecaps 1 1K - 65 512 + kdtrace 147 125K - 3953 512,1024 + kenv 90 61K - 94 512,16384 + kqueue 44 22K - 1947 512 + proc-args 37 19K - 1947 512 + hhook 13 7K - 13 512 + ithread 69 35K - 69 512 + prison 4 2K - 4 512 + KTRACE 100 50K - 100 512 + linker 219 282K - 239 512,1024,2048,4096,8192,16384,65536 + lockf 24 12K - 3214 512 + loginclass 3 2K - 11 512 + devbuf 1826 1670K - 2151 512,1024,2048,4096,8192,16384,65536 + temp 17 40K - 4904 512,1024,2048,4096,8192,16384 + module 504 252K - 505 512 + mtx_pool 2 32K - 2 16384 + osd 3 2K - 9 512 + pmchooks 1 1K - 1 512 + pmc 1 1K - 1 512 + pgrp 20 10K - 403 512 + session 20 10K - 403 512 + proc 2 32K - 2 16384 + subproc 117 425K - 2020 1024,8192 + cred 41 21K - 7338 512 + acpiintr 1 1K - 1 512 + plimit 17 17K - 5705 1024 + uidinfo 5 10K - 7 512,8192 + dumper 1 2K - 1 2048 + sysctl 0 0K - 1 512 + sysctloid 2675 1338K - 2753 512 + sysctltmp 0 0K - 4785 512,1024,4096 + acpica 815 424K - 48871 512,1024,2048,4096,16384 + tidhash 1 32K - 1 32768 + callout 3 1692K - 3 + umtx 272 136K - 272 512 + p1003.1b 1 1K - 1 512 + SWAP 1 76K - 1 + bus 1051 526K - 5935 512,4096,8192 + bus-sc 38 300K - 2039 512,1024,2048,4096,8192,16384,32768,65536 + acpitask 1 64K - 1 65536 + devstat 6 50K - 6 512,16384 + epoch 4 2K - 4 512 + eventhandler 123 62K - 123 512 + gtaskqueue 22 73K - 22 512,16384 + kobj 342 2736K - 639 8192 + Per-cpu 1 1K - 1 512 + kbdmux 6 28K - 6 512,1024,2048,4096,16384 + rman 100 50K - 395 512 + sbuf 0 0K - 1170 512,1024,2048,4096,8192,16384,32768 + toponodes 10 5K - 10 512 + taskqueue 30 15K - 30 512 + terminal 11 6K - 11 512 + Unitno 23 12K - 2413 512 + vmem 3 32K - 4 4096,8192,16384 + ioctlops 0 0K - 87 512,1024,2048,4096 + select 27 14K - 27 512 + iov 0 0K - 171214 512,1024 + msg 4 68K - 4 4096,16384,32768 + sem 4 120K - 4 4096,8192 + shm 1 32K - 1 32768 + tty 14 28K - 364 2048 + pts 1 1K - 351 512 + mbuf_tag 0 0K - 16 512 + shmfd 1 16K - 1 16384 + soname 4 2K - 12286 512 + pcb 22 620K - 75 512,4096,8192,16384 + acl 0 0K - 5 16384 + vfscache 4 1081K - 4 1024,16384,32768 + cl_savebuf 0 0K - 83 512,2048 + vfs_hash 1 520K - 1 + vnodes 1 1K - 1 1024 + mount 29 16K - 198 512,1024 + statfs 0 0K - 5546 8192 + md_disk 1 8K - 6 8192 + vnodemarker 0 0K - 33 1024 +chacha20random 1 1K - 1 1024 + BPF 10 68K - 10 512,1024,16384 + ifnet 3 9K - 3 512,4096 + ifaddr 36 45K - 36 512,1024,8192,16384 + ether_multi 13 7K - 18 512 + clone 7 4K - 7 512 + ipsec 1 1K - 1 1024 + lltable 10 8K - 10 512,1024 + iflib 14 120K - 18 512,2048,4096,8192,16384,32768 + routetbl 25 14K - 29 512,1024 + vnet 1 1K - 1 512 + vnet_data 1 248K - 1 +vnet_data_free 1 1K - 1 512 + igmp 2 1K - 2 512 + in_multi 2 1K - 3 512 +encap_export_host 8 4K - 8 512 + sctp_a_it 0 0K - 2 512 + sctp_vrf 1 1K - 1 512 + sctp_ifa 4 2K - 4 512 + sctp_ifn 2 1K - 2 512 + sctp_iter 0 0K - 2 512 + tfo_ccache 1 136K - 1 + hostcache 1 64K - 1 65536 + LRO 2 48K - 2 16384,32768 + tcpfunc 1 1K - 1 512 + syncache 1 76K - 1 + in6_multi 9 5K - 9 512 + mld 2 1K - 2 512 + ip6ndp 3 2K - 3 512 + inpcbpolicy 7 4K - 158 512 + secasvar 1 4K - 1 4096 + sahead 1 4K - 1 4096 + ipsecpolicy 2 5K - 2 512,4096 + ipsec-saq 2 8K - 2 4096 + crypto 2 3K - 2 512,2048 + rpc 2 16K - 2 8192 +audit_evclass 230 115K - 285 512 + pagedep 8 140K - 36 512 + inodedep 13 532K - 109 1024 + bmsafemap 4 18K - 72 512,16384 + newblk 485 1274K - 7207 512 + indirdep 1 1K - 10 512 + freefrag 0 0K - 36 512 + freeblks 4 2K - 39 512 + freefile 1 1K - 45 512 + diradd 8 4K - 56 512 + mkdir 3 2K - 32 512 + dirrem 0 0K - 48 512 + newdirblk 2 1K - 16 512 + freework 22 11K - 107 512 + freedep 1 1K - 52 512 + jaddref 0 0K - 88 512 + jremref 0 0K - 66 512 + jnewblk 0 0K - 7206 512 + jfreefrag 0 0K - 36 512 + jseg 25 13K - 37 512 + jsegdep 498 249K - 7396 512 + sbdep 0 0K - 7 512 + savedino 0 0K - 44 1024 + jblocks 2 1K - 2 512 + softdep 1 1K - 1 1024 + ufs_dirhash 63 42K - 63 512,1024 + ufs_quota 1 520K - 1 + ufs_mount 3 33K - 5 1024,16384 + vm_pgdata 1 1K - 1 512 + UMAHash 4 24K - 9 2048,4096,8192,16384 + memdesc 1 8K - 1 8192 + pci_link 10 5K - 10 512 + atkbddev 2 1K - 2 512 + acpisem 23 12K - 23 512 + acpidev 22 11K - 22 512 + CAM SIM 3 2K - 3 512 + apmdev 1 1K - 1 512 + madt_table 0 0K - 2 512,8192 + intr 4 408K - 4 65536 + io_apic 1 4K - 1 4096 + local_apic 1 4K - 1 4096 + MCA 10 5K - 10 512 + cpus 2 1K - 2 512 + nexusdev 5 3K - 5 512 + CAM XPT 23 12K - 89 512,1024,2048,4096 + entropy 1 1K - 196 512,16384 + ext2_node 24 24K - 110 1024 + ext2_mount 9 13K - 54 512,2048,4096 + +------------------------------------------------------------------------ +vmstat -z + +ITEM SIZE LIMIT USED FREE REQ FAIL SLEEP + +UMA Kegs: 224, 0, 123, 13, 123, 0, 0 +UMA Zones: 648, 0, 125, 0, 125, 0, 0 +UMA Slabs: 112, 0, 2137, 33, 2308, 0, 0 +UMA Hash: 256, 0, 7, 8, 11, 0, 0 +4 Bucket: 32, 0, 84, 784, 10781, 0, 0 +6 Bucket: 48, 0, 46, 784, 3618, 0, 0 +8 Bucket: 64, 0, 13, 545, 992, 21, 0 +12 Bucket: 96, 0, 12, 398, 800, 0, 0 +16 Bucket: 128, 0, 31, 620, 2441, 1, 0 +32 Bucket: 256, 0, 354, 141, 12693, 4, 0 +64 Bucket: 512, 0, 70, 70, 884,18166, 0 +128 Bucket: 1024, 0, 33, 35, 433, 1, 0 +256 Bucket: 2048, 0, 43, 23, 1231, 881, 0 +vmem: 1792, 0, 3, 1, 3, 0, 0 +vmem btag: 56, 0, 6188, 415, 10296, 47, 0 +VM OBJECT: 256, 0, 1207, 203, 44937, 0, 0 +RADIX NODE: 144, 0, 4063, 3902, 134544, 0, 0 +MAP: 232, 0, 3, 65, 3, 0, 0 +KMAP ENTRY: 120, 0, 8, 256, 8, 0, 0 +MAP ENTRY: 120, 0, 842, 544, 193215, 0, 0 +VMSPACE: 2512, 0, 21, 12, 1920, 0, 0 +fakepg: 104, 0, 0, 0, 0, 0, 0 +64 pcpu: 8, 0, 2541, 275, 2541, 0, 0 +mt_stats_zone: 64, 0, 426, 86, 426, 0, 0 +mt_zone: 24, 0, 426, 238, 426, 0, 0 +16: 16, 0, 0, 0, 0, 0, 0 +32: 32, 0, 0, 0, 0, 0, 0 +64: 64, 0, 0, 0, 0, 0, 0 +128: 128, 0, 0, 0, 0, 0, 0 +256: 256, 0, 0, 0, 0, 0, 0 +512: 512, 0, 9650, 8767, 293299, 0, 0 +1024: 1024, 0, 847, 33, 15772, 0, 0 +2048: 2048, 0, 48, 12, 2278, 0, 0 +4096: 4096, 0, 39, 56, 8997, 0, 0 +8192: 8192, 0, 424, 9, 9011, 0, 0 +16384: 16384, 0, 53, 3, 760, 0, 0 +32768: 32768, 0, 6, 3, 199, 0, 0 +65536: 65536, 0, 11, 0, 219, 0, 0 +SLEEPQUEUE: 88, 0, 137, 142, 137, 0, 0 +Files: 80, 0, 71, 223, 46666, 0, 0 +filedesc0: 1104, 0, 44, 28, 1947, 0, 0 +TURNSTILE: 136, 0, 137, 63, 137, 0, 0 +rl_entry: 40, 0, 47, 547, 47, 0, 0 +umtx pi: 96, 0, 0, 0, 0, 0, 0 +umtx_shm: 88, 0, 0, 0, 0, 0, 0 +MAC labels: 40, 0, 0, 0, 0, 0, 0 +PROC: 1320, 0, 43, 29, 1946, 0, 0 +THREAD: 1400, 0, 127, 9, 127, 0, 0 +cpuset: 104, 0, 7, 272, 7, 0, 0 +domainset: 40, 0, 0, 0, 0, 0, 0 +audit_record: 1280, 0, 0, 0, 0, 0, 0 +mbuf_packet: 256, 801780, 6, 507, 1446, 0, 0 +mbuf: 256, 801780, 1068, 1216, 515316, 0, 0 +mbuf_cluster: 2048, 125276, 1530, 512, 70726, 0, 0 +mbuf_jumbo_page: 4096, 62638, 0, 114, 39306, 0, 0 +mbuf_jumbo_9k: 9216, 55677, 0, 0, 0, 0, 0 +mbuf_jumbo_16k: 16384, 41756, 0, 0, 0, 0, 0 +epoch_record pcpu: 256, 0, 4, 60, 4, 0, 0 +g_bio: 400, 0, 0, 297, 25617, 0, 0 +DMAR_MAP_ENTRY: 120, 0, 0, 0, 0, 0, 0 +ttyinq: 160, 0, 135, 177, 5520, 0, 0 +FPU_save_area: 832, 0, 0, 0, 0, 0, 0 +ttyoutq: 256, 0, 72, 183, 2944, 0, 0 +nvme_request: 128, 0, 0, 0, 0, 0, 0 +cryptop: 128, 0, 0, 0, 0, 0, 0 +cryptodesc: 120, 0, 0, 0, 0, 0, 0 +crypto_session: 24, 0, 0, 0, 0, 0, 0 +vtnet_tx_hdr: 24, 0, 0, 0, 0, 0, 0 +VNODE: 480, 0, 783, 33, 1624, 0, 0 +VNODEPOLL: 120, 0, 0, 0, 0, 0, 0 +BUF TRIE: 144, 0, 681, 12846, 12720, 0, 0 +NAMEI: 1024, 0, 1, 39, 118388, 0, 0 +rentr: 24, 0, 0, 0, 0, 0, 0 +S VFS Cache: 108, 0, 779, 236, 3180, 0, 0 +STS VFS Cache: 148, 0, 0, 0, 0, 0, 0 +L VFS Cache: 328, 0, 11, 49, 43, 0, 0 +LTS VFS Cache: 368, 0, 0, 0, 0, 0, 0 +DIRHASH: 1024, 0, 116, 16, 116, 0, 0 +NCLNODE: 592, 0, 0, 0, 0, 0, 0 +AIO: 208, 0, 0, 0, 0, 0, 0 +AIOP: 32, 0, 0, 0, 0, 0, 0 +AIOCB: 752, 0, 0, 0, 0, 0, 0 +AIOLIO: 280, 0, 0, 0, 0, 0, 0 +pipe: 760, 0, 3, 37, 698, 0, 0 +procdesc: 136, 0, 1, 86, 2, 0, 0 +Mountpoints: 2744, 0, 3, 3, 8, 0, 0 +ksiginfo: 112, 0, 53, 997, 423, 0, 0 +itimer: 352, 0, 0, 0, 0, 0, 0 +KNOTE: 160, 0, 0, 0, 0, 0, 0 +socket: 872, 64304, 18, 34, 1618, 0, 0 +unpcb: 256, 64305, 10, 125, 1449, 0, 0 +ipq: 56, 3976, 0, 0, 0, 0, 0 +udp_inpcb: 488, 64304, 2, 62, 131, 0, 0 +udpcb: 32, 64356, 2, 618, 131, 0, 0 +tcp_inpcb: 488, 64304, 4, 60, 26, 0, 0 +tcpcb: 976, 64304, 4, 36, 26, 0, 0 +tcptw: 88, 12870, 0, 0, 0, 0, 0 +syncache: 168, 15364, 0, 69, 21, 0, 0 +hostcache: 96, 15375, 0, 0, 0, 0, 0 +sackhole: 32, 0, 0, 0, 0, 0, 0 +tfo: 4, 0, 0, 0, 0, 0, 0 +tfo_ccache_entries: 80, 0, 0, 0, 0, 0, 0 +tcpreass: 48, 7885, 0, 0, 0, 0, 0 +tcp_log: 408, 1000008, 0, 0, 0, 0, 0 +tcp_log_bucket: 144, 0, 0, 0, 0, 0, 0 +tcp_log_node: 120, 0, 0, 0, 0, 0, 0 +sctp_ep: 1280, 64305, 0, 0, 0, 0, 0 +sctp_asoc: 2408, 40000, 0, 0, 0, 0, 0 +sctp_laddr: 48, 80012, 0, 332, 3, 0, 0 +sctp_raddr: 736, 80000, 0, 0, 0, 0, 0 +sctp_chunk: 152, 400010, 0, 0, 0, 0, 0 +sctp_readq: 152, 400010, 0, 0, 0, 0, 0 +sctp_stream_msg_out: 112, 400015, 0, 0, 0, 0, 0 +sctp_asconf: 40, 400059, 0, 0, 0, 0, 0 +sctp_asconf_ack: 48, 400060, 0, 0, 0, 0, 0 +udplite_inpcb: 488, 64304, 0, 0, 0, 0, 0 +ripcb: 488, 64304, 1, 31, 1, 0, 0 +IPsec SA lft_c: 16, 0, 0, 0, 0, 0, 0 +rtentry: 208, 0, 11, 122, 14, 0, 0 +selfd: 64, 0, 46, 760, 81334, 0, 0 +swpctrie: 144, 250560, 0, 0, 0, 0, 0 +swblk: 136, 250560, 0, 0, 0, 0, 0 +FFS inode: 160, 0, 725, 91, 770, 0, 0 +FFS1 dinode: 128, 0, 0, 0, 0, 0, 0 +FFS2 dinode: 256, 0, 725, 70, 770, 0, 0 + + +------------------------------------------------------------------------ +vmstat -i + +interrupt total rate +irq1: atkbd0 2 0 +irq11: em0:irq0++ 57446 3781 +irq14: ata0 8178 538 +cpu0:timer 8336 549 +cpu1:timer 6490 427 +Total 80452 5295 + +------------------------------------------------------------------------ +pstat -T + + 71/64303 files +0M/0M swap space + +------------------------------------------------------------------------ +pstat -s + +Device 512-blocks Used Avail Capacity + +------------------------------------------------------------------------ +iostat + + tty md0 ada0 cd0 cpu + tin tout KB/t tps MB/s KB/t tps MB/s KB/t tps MB/s us ni sy in id + 0 3091 0.00 2 0.00 75.75 65 4.77 0.00 0 0.00 6 0 9 2 83 + +------------------------------------------------------------------------ +ipcs -a + +Message Queues: +T ID KEY MODE OWNER GROUP CREATOR CGROUP CBYTES QNUM QBYTES LSPID LRPID STIME RTIME CTIME + +Shared Memory: +T ID KEY MODE OWNER GROUP CREATOR CGROUP NATTCH SEGSZ CPID LPID ATIME DTIME CTIME + +Semaphores: +T ID KEY MODE OWNER GROUP CREATOR CGROUP NSEMS OTIME CTIME + + +------------------------------------------------------------------------ +ipcs -T + +msginfo: + msgmax: 16384 (max characters in a message) + msgmni: 40 (# of message queues) + msgmnb: 2048 (max characters in a message queue) + msgtql: 40 (max # of messages in system) + msgssz: 8 (size of a message segment) + msgseg: 2048 (# of message segments in system) + +shminfo: + shmmax: 536870912 (max shared memory segment size) + shmmin: 1 (min shared memory segment size) + shmmni: 192 (max number of shared memory identifiers) + shmseg: 128 (max shared memory segments per process) + shmall: 131072 (max amount of shared memory in pages) + +seminfo: + semmni: 50 (# of semaphore identifiers) + semmns: 340 (# of semaphores in system) + semmnu: 150 (# of undo structures in system) + semmsl: 340 (max # of semaphores per id) + semopm: 100 (max # of operations per semop call) + semume: 50 (max # of undo entries per process) + semusz: 632 (size in bytes of undo structure) + semvmx: 32767 (semaphore maximum value) + semaem: 16384 (adjust on exit max value) + + +------------------------------------------------------------------------ +nfsstat + +Rpc Counts: + Getattr Setattr Lookup Readlink Read Write Create Remove + 0 0 0 0 0 0 0 0 + Rename Link Symlink Mkdir Rmdir Readdir RdirPlus Access + 0 0 0 0 0 0 0 0 + Mknod Fsstat Fsinfo PathConf Commit + 0 0 0 0 0 +Rpc Info: + TimedOut Invalid X Replies Retries Requests + 0 0 0 0 0 +Cache Info: + Attr Hits Attr Misses Lkup Hits Lkup Misses BioR Hits BioR Misses BioW Hits BioW Misses + 0 0 0 0 0 0 0 0 + BioRL Hits BioRL Misses BioD Hits BioD Misses DirE Hits DirE Misses Accs Hits Accs Misses + 0 0 0 0 0 0 0 0 +Server Info: + Getattr Setattr Lookup Readlink Read Write Create Remove + 0 0 0 0 0 0 0 0 + Rename Link Symlink Mkdir Rmdir Readdir RdirPlus Access + 0 0 0 0 0 0 0 0 + Mknod Fsstat Fsinfo PathConf Commit + 0 0 0 0 0 +Server Re-Failed: + 140737488346800 +Server Faults: +140737488346800 +Server Write + WriteOps WriteRPC Opsaved + 0 0 0 +Server Cache + Inprog Idem Non-Idem Misses + 0 0 0 0 + +------------------------------------------------------------------------ +netstat -s + +tcp: + 163845 packets sent + 128355 data packets (162803686 bytes) + 0 data packets (0 bytes) retransmitted + 0 data packets unnecessarily retransmitted + 0 resends initiated by MTU discovery + 33332 ack-only packets (413 delayed) + 0 URG only packets + 0 window probe packets + 2158 window update packets + 0 control packets + 126037 packets received + 60156 acks (for 162802947 bytes) + 1 duplicate ack + 0 acks for unsent data + 69695 packets (95380584 bytes) received in-sequence + 0 completely duplicate packets (0 bytes) + 0 old duplicate packets + 0 packets with some dup. data (0 bytes duped) + 0 out-of-order packets (0 bytes) + 0 packets (0 bytes) of data after window + 0 window probes + 1 window update packet + 0 packets received after close + 0 discarded for bad checksums + 0 discarded for bad header offset fields + 0 discarded because packet too short + 0 discarded due to memory problems + 0 connection requests + 21 connection accepts + 0 bad connection attempts + 0 listen queue overflows + 0 ignored RSTs in the windows + 21 connections established (including accepts) + 0 times used RTT from hostcache + 0 times used RTT variance from hostcache + 0 times used slow-start threshold from hostcache + 22 connections closed (including 20 drops) + 0 connections updated cached RTT on close + 0 connections updated cached RTT variance on close + 0 connections updated cached ssthresh on close + 0 embryonic connections dropped + 60156 segments updated rtt (of 11890 attempts) + 0 retransmit timeouts + 0 connections dropped by rexmit timeout + 0 persist timeouts + 0 connections dropped by persist timeout + 0 Connections (fin_wait_2) dropped because of timeout + 0 keepalive timeouts + 0 keepalive probes sent + 0 connections dropped by keepalive + 43640 correct ACK header predictions + 65380 correct data packet header predictions + 21 syncache entries added + 0 retransmitted + 0 dupsyn + 0 dropped + 21 completed + 0 bucket overflow + 0 cache overflow + 0 reset + 0 stale + 0 aborted + 0 badack + 0 unreach + 0 zone failures + 21 cookies sent + 21 cookies received + 0 hostcache entries added + 0 bucket overflow + 0 SACK recovery episodes + 0 segment rexmits in SACK recovery episodes + 0 byte rexmits in SACK recovery episodes + 0 SACK options (SACK blocks) received + 0 SACK options (SACK blocks) sent + 0 SACK scoreboard overflow + 0 packets with ECN CE bit set + 0 packets with ECN ECT(0) bit set + 0 packets with ECN ECT(1) bit set + 0 successful ECN handshakes + 0 times ECN reduced the congestion window + 0 packets with matching signature received + 0 packets with bad signature received + 0 times failed to make signature due to no SA + 0 times unexpected signature received + 0 times no signature provided by segment + 0 Path MTU discovery black hole detection activations + 0 Path MTU discovery black hole detection min MSS activations + 0 Path MTU discovery black hole detection failures +TCP connection count by state: + 0 connections in CLOSED state + 3 connections in LISTEN state + 0 connections in SYN_SENT state + 0 connections in SYN_RCVD state + 1 connection in ESTABLISHED state + 0 connections in CLOSE_WAIT state + 0 connections in FIN_WAIT_1 state + 0 connections in CLOSING state + 0 connections in LAST_ACK state + 0 connections in FIN_WAIT_2 state + 0 connections in TIME_WAIT state +udp: + 44 datagrams received + 0 with incomplete header + 0 with bad data length field + 0 with bad checksum + 0 with no checksum + 0 dropped due to no socket + 1 broadcast/multicast datagram undelivered + 0 dropped due to full socket buffers + 0 not for hashed pcb + 43 delivered + 43 datagrams output + 0 times multicast source filter matched +ip: + 126087 total packets received + 0 bad header checksums + 0 with size smaller than minimum + 0 with data size < data length + 0 with ip length > max ip packet size + 0 with header length < data size + 0 with data length < header length + 0 with bad options + 0 with incorrect version number + 0 fragments received + 0 fragments dropped (dup or out of space) + 0 fragments dropped after timeout + 0 packets reassembled ok + 126081 packets for this host + 0 packets for unknown/unsupported protocol + 0 packets forwarded (0 packets fast forwarded) + 6 packets not forwardable + 0 packets received for unknown multicast group + 0 redirects sent + 163890 packets sent from this host + 0 packets sent with fabricated ip header + 0 output packets dropped due to no bufs, etc. + 0 output packets discarded due to no route + 0 output datagrams fragmented + 0 fragments created + 0 datagrams that can't be fragmented + 0 tunneling packets that can't find gif + 0 datagrams with bad address in header +icmp: + 0 calls to icmp_error + 0 errors not generated in response to an icmp message + 0 messages with bad code fields + 0 messages less than the minimum length + 0 messages with bad checksum + 0 messages with bad length + 0 multicast echo requests ignored + 0 multicast timestamp requests ignored + 0 message responses generated + 0 invalid return addresses + 0 no return routes +ipsec: + 0 inbound packets violated process security policy + 0 inbound packets failed due to insufficient memory + 0 invalid inbound packets + 0 outbound packets violated process security policy + 0 outbound packets with no SA available + 0 outbound packets failed due to insufficient memory + 0 outbound packets with no route available + 0 invalid outbound packets + 0 outbound packets with bundled SAs + 0 spd cache hits + 0 spd cache misses + 0 clusters copied during clone + 0 mbufs inserted during makespace +ah: + 0 packets shorter than header shows + 0 packets dropped; protocol family not supported + 0 packets dropped; no TDB + 0 packets dropped; bad KCR + 0 packets dropped; queue full + 0 packets dropped; no transform + 0 replay counter wraps + 0 packets dropped; bad authentication detected + 0 packets dropped; bad authentication length + 0 possible replay packets detected + 0 packets in + 0 packets out + 0 packets dropped; invalid TDB + 0 bytes in + 0 bytes out + 0 packets dropped; larger than IP_MAXPACKET + 0 packets blocked due to policy + 0 crypto processing failures + 0 tunnel sanity check failures +esp: + 0 packets shorter than header shows + 0 packets dropped; protocol family not supported + 0 packets dropped; no TDB + 0 packets dropped; bad KCR + 0 packets dropped; queue full + 0 packets dropped; no transform + 0 packets dropped; bad ilen + 0 replay counter wraps + 0 packets dropped; bad encryption detected + 0 packets dropped; bad authentication detected + 0 possible replay packets detected + 0 packets in + 0 packets out + 0 packets dropped; invalid TDB + 0 bytes in + 0 bytes out + 0 packets dropped; larger than IP_MAXPACKET + 0 packets blocked due to policy + 0 crypto processing failures + 0 tunnel sanity check failures +ipcomp: + 0 packets shorter than header shows + 0 packets dropped; protocol family not supported + 0 packets dropped; no TDB + 0 packets dropped; bad KCR + 0 packets dropped; queue full + 0 packets dropped; no transform + 0 replay counter wraps + 0 packets in + 0 packets out + 0 packets dropped; invalid TDB + 0 bytes in + 0 bytes out + 0 packets dropped; larger than IP_MAXPACKET + 0 packets blocked due to policy + 0 crypto processing failures + 0 packets sent uncompressed; size < compr. algo. threshold + 0 packets sent uncompressed; compression was useless +arp: + 2 ARP requests sent + 1 ARP reply sent + 1 ARP request received + 1 ARP reply received + 3 ARP packets received + 0 total packets dropped due to no ARP entry + 0 ARP entrys timed out + 0 Duplicate IPs seen +ip6: + 0 total packets received + 0 with size smaller than minimum + 0 with data size < data length + 0 with bad options + 0 with incorrect version number + 0 fragments received + 0 fragments dropped (dup or out of space) + 0 fragments dropped after timeout + 0 fragments that exceeded limit + 0 packets reassembled ok + 0 packets for this host + 0 packets forwarded + 0 packets not forwardable + 0 redirects sent + 0 packets sent from this host + 0 packets sent with fabricated ip header + 0 output packets dropped due to no bufs, etc. + 0 output packets discarded due to no route + 0 output datagrams fragmented + 0 fragments created + 0 datagrams that can't be fragmented + 0 packets that violated scope rules + 0 multicast packets which we don't join + Mbuf statistics: + 0 one mbuf + 0 one ext mbuf + 0 two or more ext mbuf + 0 packets whose headers are not contiguous + 0 tunneling packets that can't find gif + 0 packets discarded because of too many headers + 0 failures of source address selection +icmp6: + 0 calls to icmp6_error + 0 errors not generated in response to an icmp6 message + 0 errors not generated because of rate limitation + 0 messages with bad code fields + 0 messages < minimum length + 0 bad checksums + 0 messages with bad length + Histogram of error messages to be generated: + 0 no route + 0 administratively prohibited + 0 beyond scope + 0 address unreachable + 0 port unreachable + 0 packet too big + 0 time exceed transit + 0 time exceed reassembly + 0 erroneous header field + 0 unrecognized next header + 0 unrecognized option + 0 redirect + 0 unknown + 0 message responses generated + 0 messages with too many ND options + 0 messages with bad ND options + 0 bad neighbor solicitation messages + 0 bad neighbor advertisement messages + 0 bad router solicitation messages + 0 bad router advertisement messages + 0 bad redirect messages + 0 path MTU changes +ipsec6: + 0 inbound packets violated process security policy + 0 inbound packets failed due to insufficient memory + 0 invalid inbound packets + 0 outbound packets violated process security policy + 0 outbound packets with no SA available + 0 outbound packets failed due to insufficient memory + 0 outbound packets with no route available + 0 invalid outbound packets + 0 outbound packets with bundled SAs + 0 spd cache hits + 0 spd cache misses + 0 clusters copied during clone + 0 mbufs inserted during makespace +rip6: + 0 messages received + 0 checksum calculations on inbound + 0 messages with bad checksum + 0 messages dropped due to no socket + 0 multicast messages dropped due to no socket + 0 messages dropped due to full socket buffers + 0 delivered + 0 datagrams output +pfkey: + 0 requests sent from userland + 0 bytes sent from userland + 0 messages with invalid length field + 0 messages with invalid version field + 0 messages with invalid message type field + 0 messages too short + 0 messages with memory allocation failure + 0 messages with duplicate extension + 0 messages with invalid extension type + 0 messages with invalid sa type + 0 messages with invalid address extension + 0 requests sent to userland + 0 bytes sent to userland + 0 messages toward single socket + 0 messages toward all sockets + 0 messages toward registered sockets + 0 messages with memory allocation failure + +------------------------------------------------------------------------ +netstat -m + +1074/1723/2797 mbufs in use (current/cache/total) +1023/1019/2042/125276 mbuf clusters in use (current/cache/total/max) +6/507 mbuf+clusters out of packet secondary zone in use (current/cache) +0/114/114/62638 4k (page size) jumbo clusters in use (current/cache/total/max) +0/0/0/55677 9k jumbo clusters in use (current/cache/total/max) +0/0/0/41756 16k jumbo clusters in use (current/cache/total/max) +2314K/2924K/5239K bytes allocated to network (current/cache/total) +0/0/0 requests for mbufs denied (mbufs/clusters/mbuf+clusters) +0/0/0 requests for mbufs delayed (mbufs/clusters/mbuf+clusters) +0/0/0 requests for jumbo clusters delayed (4k/9k/16k) +0/0/0 requests for jumbo clusters denied (4k/9k/16k) +0 sendfile syscalls +0 sendfile syscalls completed without I/O request +0 requests for I/O initiated by sendfile +0 pages read by sendfile as part of a request +0 pages were valid at time of a sendfile request +0 pages were valid and substituted to bogus page +0 pages were requested for read ahead by applications +0 pages were read ahead by sendfile +0 times sendfile encountered an already busy page +0 requests for sfbufs denied +0 requests for sfbufs delayed + +------------------------------------------------------------------------ +netstat -anA + +Active Internet connections (including servers) +Tcpcb Proto Recv-Q Send-Q Local Address Foreign Address (state) +fffff80003b591e8 udp4 0 0 *.514 *.* +fffff80003b58d58 udp6 0 0 *.514 *.* + +------------------------------------------------------------------------ +netstat -aL + +Current listen queue sizes (qlen/incqlen/maxqlen) +Proto Listen Local Address + +------------------------------------------------------------------------ +fstat + +fstat: can't read file 1 at 0x20007ffffffffff +fstat: can't read file 2 at 0x4000000001fffff +fstat: can't read file 5 at 0x4400000000 +fstat: can't read file 11 at 0x4400000000 +fstat: can't read file 17 at 0x4200000000 +fstat: can't read file 1 at 0x20007ffffffffff +fstat: can't read file 2 at 0x4000000001fffff +fstat: can't read file 4 at 0x780000ffff +fstat: can't read file 5 at 0x800000000 +fstat: can't read file 7 at 0x20007ffffffffff +fstat: can't read file 8 at 0x4000000001fffff +fstat: can't read file 10 at 0x780000ffff +fstat: can't read file 1 at 0x20007ffffffffff +fstat: can't read file 2 at 0x4000000001fffff +fstat: can't read file 1 at 0x20007ffffffffff +fstat: can't read file 2 at 0x4000000001fffff +fstat: can't read file 1 at 0x20007ffffffffff +fstat: can't read file 2 at 0x4000000001fffff +fstat: can't read file 1 at 0x20007ffffffffff +fstat: can't read file 2 at 0x4000000001fffff +fstat: can't read file 1 at 0x20007ffffffffff +fstat: can't read file 2 at 0x4000000001fffff +fstat: can't read file 1 at 0x20007ffffffffff +fstat: can't read file 2 at 0x4000000001fffff +fstat: can't read file 1 at 0x20007ffffffffff +fstat: can't read file 2 at 0x4000000001fffff +fstat: can't read file 1 at 0x20007ffffffffff +fstat: can't read file 2 at 0x4000000001fffff +fstat: can't read file 1 at 0x20007ffffffffff +fstat: can't read file 2 at 0x4000000001fffff +fstat: can't read file 4 at 0x780000ffff +fstat: can't read file 1 at 0x20007ffffffffff +fstat: can't read file 2 at 0x4000000001fffff +fstat: can't read file 4 at 0x780000ffff +fstat: can't read file 1 at 0x20007ffffffffff +fstat: can't read file 2 at 0x4000000001fffff +fstat: can't read file 4 at 0x780000ffff +fstat: can't read file 5 at 0x600000000 +fstat: can't read file 1 at 0x20007ffffffffff +fstat: can't read file 2 at 0x4000000001fffff +fstat: can't read file 4 at 0x780000ffff +fstat: can't read file 1 at 0x20007ffffffffff +fstat: can't read file 2 at 0x4000000001fffff +fstat: can't read file 4 at 0x780000ffff +fstat: can't read file 5 at 0x400000000 +fstat: can't read file 7 at 0x20007ffffffffff +fstat: can't read file 8 at 0x4000000001fffff +fstat: can't read file 10 at 0x780000ffff +fstat: can't read file 11 at 0x400000000 +fstat: can't read file 13 at 0x20007ffffffffff +fstat: can't read file 14 at 0x4000000001fffff +fstat: can't read file 16 at 0x780000ffff +fstat: can't read file 17 at 0x400000000 +fstat: can't read file 19 at 0x20007ffffffffff +fstat: can't read file 20 at 0x4000000001fffff +fstat: can't read file 22 at 0x780000ffff +fstat: can't read file 23 at 0x2600000001 +fstat: can't read file 1 at 0x20007ffffffffff +fstat: can't read file 2 at 0x4000000001fffff +fstat: can't read file 4 at 0x780000ffff +fstat: can't read file 5 at 0x800000000 +fstat: can't read file 7 at 0x20007ffffffffff +fstat: can't read file 8 at 0x4000000001fffff +fstat: can't read file 1 at 0x200000000000000 +fstat: can't read file 2 at 0x400000000000000 +fstat: can't read file 5 at 0x800000000 +fstat: can't read file 7 at 0x200000000000002 +fstat: can't read file 8 at 0x400000000000000 +fstat: can't read file 11 at 0x400000000 +fstat: can't read file 1 at 0x20007ffffffffff +fstat: can't read file 2 at 0x4000000001fffff +fstat: can't read file 4 at 0x780000ffff +fstat: can't read file 5 at 0x800000000 +fstat: can't read file 7 at 0x20007ffffffffff +fstat: can't read file 8 at 0x4000000001fffff +fstat: can't read file 10 at 0x780000ffff +fstat: can't read file 1 at 0x20007ffffffffff +fstat: can't read file 2 at 0x4000000001fffff +fstat: can't read file 4 at 0x780000ffff +fstat: can't read file 5 at 0x800000000 +USER CMD PID FD MOUNT INUM MODE SZ|DV R/W +root cp 1946 root / 2 drwxr-xr-x 1024 r +root cp 1946 wd / 1685376 drwxr-xr-x 512 r +root cp 1946 text / 240801 -r-xr-xr-x 31824 r +root cp 1946 ctty /dev 102 crw--w---- pts/0 rw +root cp 1946 0 /dev 102 crw--w---- pts/0 rw +root csh 1944 root / 2 drwxr-xr-x 1024 r +root csh 1944 wd / 1685376 drwxr-xr-x 512 r +root csh 1944 text / 240777 -r-xr-xr-x 429104 r +root csh 1944 ctty /dev 102 crw--w---- pts/0 rw +root md0 1832 root / 2 drwxr-xr-x 1024 r +root md0 1832 wd / 2 drwxr-xr-x 1024 r +root sshd 801 root / 2 drwxr-xr-x 1024 r +root sshd 801 wd / 2 drwxr-xr-x 1024 r +root sshd 801 text / 2006533 -r-xr-xr-x 319304 r +root sshd 801 0 /dev 40 crw-rw-rw- null rw +root sshd 801 6 /dev 40 crw-rw-rw- null rw +root getty 798 root / 2 drwxr-xr-x 1024 r +root getty 798 wd / 2 drwxr-xr-x 1024 r +root getty 798 text / 2006894 -r-xr-xr-x 36032 r +root getty 798 ctty /dev 83 crw------- ttyv7 rw +root getty 798 0 /dev 83 crw------- ttyv7 rw +root getty 797 root / 2 drwxr-xr-x 1024 r +root getty 797 wd / 2 drwxr-xr-x 1024 r +root getty 797 text / 2006894 -r-xr-xr-x 36032 r +root getty 797 ctty /dev 82 crw------- ttyv6 rw +root getty 797 0 /dev 82 crw------- ttyv6 rw +root getty 796 root / 2 drwxr-xr-x 1024 r +root getty 796 wd / 2 drwxr-xr-x 1024 r +root getty 796 text / 2006894 -r-xr-xr-x 36032 r +root getty 796 ctty /dev 81 crw------- ttyv5 rw +root getty 796 0 /dev 81 crw------- ttyv5 rw +root getty 795 root / 2 drwxr-xr-x 1024 r +root getty 795 wd / 2 drwxr-xr-x 1024 r +root getty 795 text / 2006894 -r-xr-xr-x 36032 r +root getty 795 ctty /dev 80 crw------- ttyv4 rw +root getty 795 0 /dev 80 crw------- ttyv4 rw +root getty 794 root / 2 drwxr-xr-x 1024 r +root getty 794 wd / 2 drwxr-xr-x 1024 r +root getty 794 text / 2006894 -r-xr-xr-x 36032 r +root getty 794 ctty /dev 79 crw------- ttyv3 rw +root getty 794 0 /dev 79 crw------- ttyv3 rw +root getty 793 root / 2 drwxr-xr-x 1024 r +root getty 793 wd / 2 drwxr-xr-x 1024 r +root getty 793 text / 2006894 -r-xr-xr-x 36032 r +root getty 793 ctty /dev 78 crw------- ttyv2 rw +root getty 793 0 /dev 78 crw------- ttyv2 rw +root getty 792 root / 2 drwxr-xr-x 1024 r +root getty 792 wd / 2 drwxr-xr-x 1024 r +root getty 792 text / 2006894 -r-xr-xr-x 36032 r +root getty 792 ctty /dev 77 crw------- ttyv1 rw +root getty 792 0 /dev 77 crw------- ttyv1 rw +root getty 791 root / 2 drwxr-xr-x 1024 r +root getty 791 wd / 2 drwxr-xr-x 1024 r +root getty 791 text / 2006894 -r-xr-xr-x 36032 r +root getty 791 ctty /dev 76 crw------- ttyv0 rw +root getty 791 0 /dev 76 crw------- ttyv0 rw +root cron 741 root / 2 drwxr-xr-x 1024 r +root cron 741 wd / 1605136 drwxr-x--- 512 r +root cron 741 text / 2006447 -r-xr-xr-x 52272 r +root cron 741 0 /dev 40 crw-rw-rw- null rw +smmsp sendmail 737 root / 2 drwxr-xr-x 1024 r +smmsp sendmail 737 wd / 1605148 drwxrwx--- 512 r +smmsp sendmail 737 text / 2007120 -r-xr-sr-x 740512 r +smmsp sendmail 737 0 /dev 40 crw-rw-rw- null r +root sendmail 734 root / 2 drwxr-xr-x 1024 r +root sendmail 734 wd / 1605147 drwxr-xr-x 512 r +root sendmail 734 text / 2007120 -r-xr-sr-x 740512 r +root sendmail 734 0 /dev 40 crw-rw-rw- null r +root sshd 731 root / 2 drwxr-xr-x 1024 r +root sshd 731 wd / 2 drwxr-xr-x 1024 r +root sshd 731 text / 2006533 -r-xr-xr-x 319304 r +root sshd 731 0 /dev 40 crw-rw-rw- null rw +root syslogd 549 root / 2 drwxr-xr-x 1024 r +root syslogd 549 wd / 2 drwxr-xr-x 1024 r +root syslogd 549 text / 2006612 -r-xr-xr-x 60616 r +root syslogd 549 0 /dev 40 crw-rw-rw- null rw +root syslogd 549 6 /dev 40 crw-rw-rw- null rw +root syslogd 549 12 /dev 40 crw-rw-rw- null rw +root syslogd 549 18* pipe fffff80003f058e8 <-> fffff80003f05a50 0 rw +root devd 406 root / 2 drwxr-xr-x 1024 r +root devd 406 wd / 2 drwxr-xr-x 1024 r +root devd 406 text / 160589 -r-xr-xr-x 993232 r +root devd 406 0 /dev 40 crw-rw-rw- null rw +root devd 406 6 /dev 40 crw-rw-rw- null rw +_dhcp dhclient 405 root / 2 drwxr-xr-x 1024 r +_dhcp dhclient 405 wd / 2 drwxr-xr-x 1024 r +_dhcp dhclient 405 text / 160605 -r-xr-xr-x 106856 r +_dhcp dhclient 405 0 /dev 40 crw-rw-rw- null rw +_dhcp dhclient 405 6 /dev 40 crw-rw-rw- null rw +root dhclient 358 root / 2 drwxr-xr-x 1024 r +root dhclient 358 wd / 2 drwxr-xr-x 1024 r +root dhclient 358 text / 160605 -r-xr-xr-x 106856 r +root dhclient 358 0 /dev 40 crw-rw-rw- null rw +root dhclient 358 6 /dev 40 crw-rw-rw- null rw +root dhclient 355 root / 2 drwxr-xr-x 1024 r +root dhclient 355 wd / 2 drwxr-xr-x 1024 r +root dhclient 355 text / 160605 -r-xr-xr-x 106856 r +root dhclient 355 0 /dev 40 crw-rw-rw- null rw +root dhclient 355 6 /dev 40 crw-rw-rw- null rw +root init 1 root / 2 drwxr-xr-x 1024 r +root init 1 wd / 2 drwxr-xr-x 1024 r +root init 1 text / 160555 -r-xr-xr-x 1240504 r +root kernel 0 root / 2 drwxr-xr-x 1024 r +root kernel 0 wd / 2 drwxr-xr-x 1024 r + +------------------------------------------------------------------------ +dmesg + +---<>--- +Copyright (c) 1992-2018 The FreeBSD Project. +Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994 + The Regents of the University of California. All rights reserved. +FreeBSD is a registered trademark of The FreeBSD Foundation. +FreeBSD 12.0-RELEASE GENERIC amd64 +FreeBSD clang version 6.0.1 (tags/RELEASE_601/final 335540) (based on LLVM 6.0.1) +WARNING: DIAGNOSTIC option enabled, expect reduced performance. +Entering uma_startup with 6 boot pages configured +startup_alloc from "UMA Kegs", 5 boot pages left +startup_alloc from "UMA Zones", 4 boot pages left +startup_alloc from "UMA Zones", 3 boot pages left +startup_alloc from "UMA Hash", 2 boot pages left +startup_alloc from "UMA Zones", 1 boot pages left +Entering uma_startup1 with 0 boot pages left +Entering uma_startup2 with 0 boot pages left +VT(vga): text 80x25 +CPU: Intel Xeon E3-12xx v2 (Ivy Bridge, IBRS) (3400.06-MHz K8-class CPU) + Origin="GenuineIntel" Id=0x306a9 Family=0x6 Model=0x3a Stepping=9 + Features=0x783fbff + Features2=0xffb82203 + AMD Features=0x28100800 + AMD Features2=0x1 + Structured Extended Features=0x281 + Structured Extended Features3=0x4000000 + XSAVE Features=0x1 +Hypervisor: Origin = "KVMKVMKVM" +real memory = 2147483648 (2048 MB) +avail memory = 2042863616 (1948 MB) +Event timer "LAPIC" quality 600 +ACPI APIC Table: +FreeBSD/SMP: Multiprocessor System Detected: 2 CPUs +FreeBSD/SMP: 2 package(s) x 1 core(s) +random: unblocking device. +ioapic0 irqs 0-23 on motherboard +Launching APs: 1 +random: entropy device external interface +[ath_hal] loaded +module_register_init: MOD_LOAD (vesa, 0xffffffff810cfc20, 0) error 19 +kbd1 at kbdmux0 +random: registering fast source Intel Secure Key RNG +random: fast provider: "Intel Secure Key RNG" +netmap: loaded module +nexus0 +vtvga0: on motherboard +cryptosoft0: on motherboard +acpi0: on motherboard +acpi0: Power Button (fixed) +cpu0: on acpi0 +atrtc0: port 0x70-0x71,0x72-0x77 irq 8 on acpi0 +atrtc0: registered as a time-of-day clock, resolution 1.000000s +Event timer "RTC" frequency 32768 Hz quality 0 +Timecounter "ACPI-fast" frequency 3579545 Hz quality 900 +acpi_timer0: <24-bit timer at 3.579545MHz> port 0x608-0x60b on acpi0 +pcib0: port 0xcf8-0xcff on acpi0 +pci0: on pcib0 +isab0: at device 1.0 on pci0 +isa0: on isab0 +atapci0: port 0x1f0-0x1f7,0x3f6,0x170-0x177,0x376,0xc0c0-0xc0cf at device 1.1 on pci0 +ata0: at channel 0 on atapci0 +ata1: at channel 1 on atapci0 +pci0: at device 1.3 (no driver attached) +vgapci0: mem 0xfc000000-0xfdffffff,0xfebb0000-0xfebb0fff at device 2.0 on pci0 +vgapci0: Boot video device +em0: port 0xc000-0xc03f mem 0xfeb80000-0xfeb9ffff irq 11 at device 3.0 on pci0 +em0: attach_pre capping queues at 1 +em0: using 1024 tx descriptors and 1024 rx descriptors +em0: allocated for 1 tx_queues +em0: allocated for 1 rx_queues +em0: Ethernet address: 52:54:00:10:b0:81 +em0: netmap queues/slots: TX 1/1024, RX 1/1024 +uhci0: port 0xc040-0xc05f irq 11 at device 4.0 on pci0 +usbus0 on uhci0 +usbus0: 12Mbps Full Speed USB v1.0 +uhci1: port 0xc060-0xc07f irq 10 at device 4.1 on pci0 +usbus1 on uhci1 +usbus1: 12Mbps Full Speed USB v1.0 +uhci2: port 0xc080-0xc09f irq 10 at device 4.2 on pci0 +usbus2 on uhci2 +usbus2: 12Mbps Full Speed USB v1.0 +ehci0: mem 0xfebb1000-0xfebb1fff irq 11 at device 4.7 on pci0 +usbus3: EHCI version 1.0 +usbus3 on ehci0 +usbus3: 480Mbps High Speed USB v2.0 +virtio_pci0: port 0xc0a0-0xc0bf mem 0xfe000000-0xfe003fff irq 10 at device 5.0 on pci0 +vtballoon0: on virtio_pci0 +acpi_syscontainer0: on acpi0 +acpi_syscontainer1: port 0xaf00-0xaf0b on acpi0 +acpi_syscontainer2: port 0xafe0-0xafe3 on acpi0 +acpi_syscontainer3: port 0xae00-0xae13 on acpi0 +atkbdc0: port 0x60,0x64 irq 1 on acpi0 +atkbd0: irq 1 on atkbdc0 +kbd0 at atkbd0 +atkbd0: [GIANT-LOCKED] +psm0: irq 12 on atkbdc0 +psm0: [GIANT-LOCKED] +psm0: model IntelliMouse Explorer, device ID 4 +fdc0: port 0x3f2-0x3f5,0x3f7 irq 6 drq 2 on acpi0 +fdc0: does not respond +device_attach: fdc0 attach returned 6 +uart0: <16550 or compatible> port 0x3f8-0x3ff irq 4 flags 0x10 on acpi0 +orm0: at iomem 0xc0000-0xc97ff,0xec800-0xeffff pnpid ORM0000 on isa0 +vga0: at port 0x3c0-0x3df iomem 0xa0000-0xbffff pnpid PNP0900 on isa0 +attimer0: at port 0x40 on isa0 +Timecounter "i8254" frequency 1193182 Hz quality 0 +Event timer "i8254" frequency 1193182 Hz quality 100 +attimer0: non-PNP ISA device will be removed from GENERIC in FreeBSD 12. +fdc0: No FDOUT register! +NULL mp in getnewvnode(9), tag crossmp +Timecounters tick every 10.000 msec +ugen2.1: at usbus2 +ugen3.1: at usbus3 +uhub0: on usbus2 +uhub1: on usbus3 +ugen1.1: at usbus1 +uhub2: on usbus1 +ugen0.1: at usbus0 +uhub3: on usbus0 +ada0 at ata0 bus 0 scbus0 target 0 lun 0 +ada0: ATA-7 device +ada0: Serial Number QM00001 +ada0: 16.700MB/s transfers (WDMA2, PIO 8192bytes) +ada0: 25600MB (52428800 512 byte sectors) +cd0 at ata0 bus 0 scbus0 target 1 lun 0 +cd0: Removable CD-ROM SCSI device +cd0: Serial Number QM00002 +cd0: 16.700MB/s transfers (WDMA2, ATAPI 12bytes, PIO 65534bytes) +cd0: Attempt to query device size failed: NOT READY, Medium not present +WARNING: DIAGNOSTIC option enabled, expect reduced performance. +Trying to mount root from ufs:/dev/ada0p2 [rw]... +Expensive timeout(9) function: 0xffffffff809ebc20(0xffffffff81af2cb0) 0.005693740 s +WARNING: / was not properly dismounted +WARNING: /: mount pending error: blocks 128 files 1 +Setting hostuuid: df521590-c04c-4022-b9a9-7d38f800ec2e. +Setting hostid: 0x5f2988f0. +Starting file system checks: +** SU+J Recovering /dev/ada0p2 +** Reading 33554432 byte journal from inode 4. +** Building recovery table. +** Resolving unreferenced inode list. +** Processing journal entries. +uhub0: 2 ports with 2 removable, self powered +uhub2: 2 ports with 2 removable, self powered +uhub3: 2 ports with 2 removable, self powered +** 3471 journal records in 126464 bytes for 87.83% utilization +** Freed 6 inodes (6 dirs) 1446 blocks, and 6 frags. + +***** FILE SYSTEM MARKED CLEAN ***** +Mounting local filesystems:. +ELF ldconfig path: /lib /usr/lib /usr/lib/compat /usr/local/lib /usr/local/lib/e2fsprogs /usr/local/lib/perl5/5.26/mach/CORE +32-bit compatibility ldconfig path: /usr/lib32 +Setting up harvesting: PURE_RDRAND,[UMA],[FS_ATIME],SWI,INTERRUPT,NET_NG,NET_ETHER,NET_TUN,MOUSE,KEYBOARD,ATTACH,CACHED +Feeding entropy: . +lo0: link state changed to UP +uhub1: 6 ports with 6 removable, self powered +em0: link state changed to UP +Starting Network: lo0 em0. +lo0: flags=8049 metric 0 mtu 16384 + options=680003 + inet6 ::1 prefixlen 128 + inet6 fe80::1%lo0 prefixlen 64 scopeid 0x2 + inet 127.0.0.1 netmask 0xff000000 + groups: lo + nd6 options=21 +em0: flags=8843 metric 0 mtu 1500 + options=81209b + ether 52:54:00:10:b0:81 + media: Ethernet autoselect (1000baseT ) + status: active + nd6 options=29 +Starting devd. +Autoloading module: intpm.ko +intsmb0: irq 9 at device 1.3 on pci0 +intsmb0: intr IRQ 9 enabled revision 0 +smbus0: on intsmb0 +Starting dhclient. +DHCPREQUEST on em0 to 255.255.255.255 port 67 +DHCPACK from 192.168.122.1 +if_delmulti_locked: detaching ifnet instance 0xfffff8000351a800 +bound to 192.168.122.107 -- renewal in 1800 seconds. +add host 127.0.0.1: gateway lo0 fib 0: route already in table +add host ::1: gateway lo0 fib 0: route already in table +add net fe80::: gateway ::1 +add net ff02::: gateway ::1 +add net ::ffff:0.0.0.0: gateway ::1 +add net ::0.0.0.0: gateway ::1 +Creating and/or trimming log files. +Starting syslogd. +savecore 559 - - reboot after panic: ext2_dirbad: /mnt/radamsa_fuzz3_ext2_15MB: bad dir ino 11 at offset 1024: mangled entry +savecore 559 - - writing core to /var/crash/vmcore.0 +Writing crash summary to /var/crash/core.txt.0. +Clearing /tmp (X related). +Updating motd:. +Mounting late filesystems:. +Configuring vt: keymap blanktime. +Performing sanity check on sshd configuration. +Starting sshd. +Starting sendmail_submit. +Starting sendmail_msp_queue. +Starting cron. +Starting background file system checks in 60 seconds. + +Sat Mar 16 03:59:12 CET 2019 +Expensive timeout(9) function: 0xffffffff80da0a00(0xfffff8002f669b70) 0.015339379 s + + +Fatal trap 12: page fault while in kernel mode +cpuid = 1; apic id = 01 +fault virtual address = 0xfffff7fe9a87894c +fault code = supervisor write data, page not present +instruction pointer = 0x20:0xffffffff8282e56c +stack pointer = 0x28:0xfffffe001b81d5d0 +frame pointer = 0x28:0xfffffe001b81d630 +code segment = base 0x0, limit 0xfffff, type 0x1b + = DPL 0, pres 1, long 1, def32 0, gran 1 +processor eflags = interrupt enabled, resume, IOPL = 0 +current process = 1946 (cp) +trap number = 12 +panic: page fault +cpuid = 1 +time = 1552705261 +KDB: stack backtrace: +db_trace_self_wrapper() at db_trace_self_wrapper+0x2b/frame 0xfffffe001b81d280 +vpanic() at vpanic+0x1a3/frame 0xfffffe001b81d2e0 +panic() at panic+0x43/frame 0xfffffe001b81d340 +trap_fatal() at trap_fatal+0x35f/frame 0xfffffe001b81d390 +trap_pfault() at trap_pfault+0x49/frame 0xfffffe001b81d3f0 +trap() at trap+0x2ba/frame 0xfffffe001b81d500 +calltrap() at calltrap+0x8/frame 0xfffffe001b81d500 +--- trap 0xc, rip = 0xffffffff8282e56c, rsp = 0xfffffe001b81d5d0, rbp = 0xfffffe001b81d630 --- +ext2_vget() at ext2_vget+0x2ec/frame 0xfffffe001b81d630 +ext2_valloc() at ext2_valloc+0x501/frame 0xfffffe001b81d6c0 +ext2_mkdir() at ext2_mkdir+0x80/frame 0xfffffe001b81d740 +VOP_MKDIR_APV() at VOP_MKDIR_APV+0x9e/frame 0xfffffe001b81d770 +kern_mkdirat() at kern_mkdirat+0x1be/frame 0xfffffe001b81d980 +amd64_syscall() at amd64_syscall+0x28d/frame 0xfffffe001b81dab0 +fast_syscall_common() at fast_syscall_common+0x101/frame 0xfffffe001b81dab0 +--- syscall (136, FreeBSD ELF64, sys_mkdir), rip = 0x8003fd55a, rsp = 0x7fffffffe6b8, rbp = 0x7fffffffe7f0 --- +Uptime: 2m5s +Dumping 157 out of 2009 MB:..11%..21%..31%..41%..51%..62%..72%..82%..92% + +------------------------------------------------------------------------ +kernel config + +options CONFIG_AUTOGENERATED +ident GENERIC +machine amd64 +cpu HAMMER +makeoptions WITH_CTF=1 +makeoptions DEBUG=-g +options PANIC_REBOOT_WAIT_TIME=0 +options DEBUG_REDZONE +options DIAGNOSTIC +options INVARIANT_SUPPORT +options INVARIANTS +options KDB_UNATTENDED +options DDB +options XENHVM +options USB_DEBUG +options ATH_ENABLE_11N +options AH_AR5416_INTERRUPT_MITIGATION +options AH_SUPPORT_AR5416 +options IEEE80211_SUPPORT_MESH +options IEEE80211_AMPDU_AGE +options IEEE80211_DEBUG +options SC_PIXEL_MODE +options VESA +options PCI_IOV +options PCI_HP +options ACPI_DMAR +options EARLY_AP_STARTUP +options SMP +options NETDUMP +options ZSTDIO +options GZIO +options EKCD +options KDB_TRACE +options KDB +options RCTL +options RACCT_DEFAULT_TO_DISABLED +options RACCT +options INCLUDE_CONFIG_FILE +options DDB_CTF +options KDTRACE_HOOKS +options KDTRACE_FRAME +options MAC +options CAPABILITIES +options CAPABILITY_MODE +options AUDIT +options HWPMC_HOOKS +options KBD_INSTALL_CDEV +options PRINTF_BUFR_SIZE=128 +options _KPOSIX_PRIORITY_SCHEDULING +options SYSVSEM +options SYSVMSG +options SYSVSHM +options STACK +options KTRACE +options SCSI_DELAY=5000 +options COMPAT_FREEBSD11 +options COMPAT_FREEBSD10 +options COMPAT_FREEBSD9 +options COMPAT_FREEBSD7 +options COMPAT_FREEBSD6 +options COMPAT_FREEBSD5 +options COMPAT_FREEBSD4 +options COMPAT_FREEBSD32 +options EFIRT +options GEOM_LABEL +options GEOM_RAID +options PSEUDOFS +options PROCFS +options CD9660 +options MSDOSFS +options NFS_ROOT +options NFSLOCKD +options NFSD +options NFSCL +options MD_ROOT +options QUOTA +options UFS_GJOURNAL +options UFS_DIRHASH +options UFS_ACL +options SOFTUPDATES +options FFS +options SCTP +options TCP_RFC7413 +options TCP_HHOOK +options TCP_BLACKBOX +options TCP_OFFLOAD +options IPSEC_SUPPORT +options IPSEC +options INET6 +options INET +options VIMAGE +options PREEMPTION +options NUMA +options SCHED_ULE +options NEW_PCIB +options GEOM_PART_GPT +options GEOM_PART_MBR +options GEOM_PART_EBR_COMPAT +options GEOM_PART_EBR +options GEOM_PART_BSD +device isa +device mem +device io +device uart_ns8250 +device cpufreq +device acpi +device pci +device fdc +device ahci +device ata +device mvs +device siis +device ahc +device ahd +device esp +device hptiop +device isp +device mpt +device mps +device mpr +device sym +device trm +device isci +device ocs_fc +device scbus +device ch +device da +device sa +device cd +device pass +device ses +device amr +device arcmsr +device ciss +device dpt +device hptmv +device hptnr +device hptrr +device hpt27xx +device iir +device ips +device mly +device twa +device smartpqi +device tws +device aac +device aacp +device aacraid +device ida +device mfi +device mlx +device mrsas +device pmspcv +device twe +device nvme +device nvd +device atkbdc +device atkbd +device psm +device kbdmux +device vga +device splash +device sc +device vt +device vt_vga +device vt_efifb +device agp +device cbb +device pccard +device cardbus +device uart +device ppc +device ppbus +device lpt +device ppi +device puc +device bxe +device de +device em +device ix +device ixv +device ixl +device iavf +device le +device ti +device txp +device vx +device miibus +device ae +device age +device alc +device ale +device bce +device bfe +device bge +device cas +device dc +device et +device fxp +device gem +device hme +device jme +device lge +device msk +device nfe +device nge +device pcn +device re +device rl +device sf +device sge +device sis +device sk +device ste +device stge +device tl +device tx +device vge +device vr +device wb +device xl +device wlan +device wlan_wep +device wlan_ccmp +device wlan_tkip +device wlan_amrr +device an +device ath +device ath_pci +device ath_hal +device ath_rate_sample +device ipw +device iwi +device iwn +device malo +device mwl +device ral +device wi +device wpi +device crypto +device loop +device random +device padlock_rng +device rdrand_rng +device ether +device vlan +device tun +device md +device gif +device firmware +device bpf +device uhci +device ohci +device ehci +device xhci +device usb +device ukbd +device umass +device sound +device snd_cmi +device snd_csa +device snd_emu10kx +device snd_es137x +device snd_hda +device snd_ich +device snd_via8233 +device mmc +device mmcsd +device sdhci +device virtio +device virtio_pci +device vtnet +device virtio_blk +device virtio_scsi +device virtio_balloon +device hyperv +device xenpci +device vmx +device netmap + +------------------------------------------------------------------------ +ddb capture buffer + + diff --git a/src/utility/urls.py b/src/utility/urls.py new file mode 100644 index 0000000..7c6fddd --- /dev/null +++ b/src/utility/urls.py @@ -0,0 +1,6 @@ +# FreeBSD latest + +FreeBSD11_2_QCOW_XZ = ( + "https://download.freebsd.org/ftp/releases/VM-IMAGES/11.2-RELEASE/amd64/Latest/FreeBSD-11.2-RELEASE-amd64.qcow2.xz" +) +FreeBSD11_2_ISO = "https://download.freebsd.org/ftp/releases/amd64/amd64/ISO-IMAGES/11.2/FreeBSD-11.2-RELEASE-amd64-dvd1.iso" diff --git a/src/utility/vmcore_remover.py b/src/utility/vmcore_remover.py new file mode 100644 index 0000000..4043704 --- /dev/null +++ b/src/utility/vmcore_remover.py @@ -0,0 +1,19 @@ +import os +import sys +import pathlib + + +def main(): + # python3 cleaner.py crash_dumps/ + subfolders = sorted([f.path for f in os.scandir(sys.argv[1]) if f.is_dir()]) + for entry in subfolders: + try: + file_list_in_entry = [f for f in os.listdir(entry) if os.path.isfile(os.path.join(entry, f))] + vmcore = list(filter(lambda element: "vmcore" in element, file_list_in_entry))[0] + pathlib.Path(os.path.join(entry, vmcore)).unlink() + except: + continue + + +if __name__ == "__main__": + sys.exit(main())

    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 literal 0 HcmV?d00001 diff --git a/assets/stdout_old.png b/assets/stdout_old.png new file mode 100644 index 0000000000000000000000000000000000000000..a6fa8352c7a6f5637c432c2c82b2b315fa81ef4b GIT binary patch literal 206636 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