Skip to main content

Intercept, audit, and block critical Python operations at runtime

Project description

malwi-box logo

malwi-box

Intercept, audit, and block critical Python operations at runtime.

Shipped without any dependencies, except pip

malwi-box demo

Use Cases

  • 🔬 Malware analysis - Safely detonate suspicious Python code and observe its behavior
  • 📦 Dependency auditing - Discover what file, network, and process access a package actually needs
  • 🔒 Runtime protection - Enforce allowlists to block unauthorized operations in production

Warning: This tool is not executed in isolation or virtualization, it runs on your actual machine, kernel and CPU. Use it at your own risk. Still it allows to reduce the blast radius of typical Python malware.

Installation

pip install malwi-box

Or with uv:

uv tool install malwi-box

Quick Start

# Block file access
$ malwi-box eval "open('/etc/passwd').read()"
[malwi-box] Blocked: Read file: /etc/passwd

# Block network requests
$ malwi-box eval "import urllib.request; urllib.request.urlopen('https://evil.com')"
[malwi-box] Blocked: DNS lookup: evil.com

# Block shell commands
$ malwi-box eval "import os; os.system('whoami')"
[malwi-box] Blocked: Shell command: /bin/sh -c whoami

# Block subprocess execution
$ malwi-box eval "import subprocess; subprocess.run(['curl', 'https://evil.com'])"
[malwi-box] Blocked: Execute: /usr/bin/curl

# Log suspicious encoding (info-only, not blocked)
$ malwi-box eval "import base64; base64.b64encode(b'secret')"
[malwi-box] Base64: b64encode

Commands

run

Run a Python script or module with sandboxing.

malwi-box run script.py [args...]
malwi-box run --force script.py     # log violations without blocking
malwi-box run --review script.py    # approve/deny each operation

eval

Execute a Python code string with sandboxing.

malwi-box eval "print('hello')"
malwi-box eval --force "import os; os.system('id')"
malwi-box eval --review "open('/etc/passwd').read()"

install

Install pip packages with sandboxing. Most malware packages perform malicious activities at install-time.

malwi-box install package
malwi-box install package --version 1.2.3
malwi-box install -r requirements.txt
malwi-box install --review package # approve/deny each operation

config

Manage configuration.

malwi-box config create # creates .malwi-box.toml
malwi-box config create --path FILE

Configuration Reference

Config file: .malwi-box.toml

# File access permissions
allow_read = [
  "$PWD",                     # working directory
  "$PYTHON_STDLIB",           # Python standard library
  "$PYTHON_SITE_PACKAGES",    # installed packages
  "$HOME/.config/myapp",      # specific config directory
  "/etc/hosts",               # specific file
]

allow_create = [
  "$PWD",                     # allow creating files in workdir
  "$TMPDIR",                  # allow temp files
]

allow_modify = [
  "$PWD/data",                # only modify files in data/
  { path = "/etc/myapp.conf", hash = "sha256:abc123..." },
]

allow_delete = []             # no deletions allowed

# Network permissions
allow_domains = [
  "pypi.org",                 # allow any port
  "files.pythonhosted.org",
  "api.example.com:443",      # restrict to specific port
]

allow_ips = [
  "10.0.0.0/8",               # CIDR notation
  "192.168.1.100:8080",       # specific IP:port
  "[::1]:443",                # IPv6 with port
]

# HTTP URL path restrictions (optional, empty = domain-only mode)
allow_http_urls = [
  "api.example.com/v1/*",         # glob pattern for paths
  "cdn.example.com/assets/*",
  "https://secure.example.com/*", # explicit scheme
]

# HTTP methods allowed (optional, empty = all methods)
allow_http_methods = ["GET", "POST", "HEAD"]

# Raw socket access (default: false, blocks SOCK_RAW creation)
allow_raw_sockets = false

# Process execution
allow_executables = [
  "/usr/bin/git",             # allow by path
  "$PWD/.venv/bin/*",         # glob pattern
  { path = "/usr/bin/curl", hash = "sha256:abc123..." },
]

allow_shell_commands = [
  "/usr/bin/git *",           # glob pattern matching
  "/usr/bin/curl *",
]

# Environment variables
allow_env_var_reads = []      # restrict env access
allow_env_var_writes = ["PATH", "PYTHONPATH"]

Path Variables

Variable Description
$PWD Working directory
$HOME User home directory
$TMPDIR System temp directory (macOS: /var/folders/.../T, Linux: /tmp)
$CACHE_HOME User cache directory (macOS: ~/Library/Caches, Linux: ~/.cache)
$PIP_CACHE pip cache directory
$VENV Active virtualenv root (if $VIRTUAL_ENV is set)
$PYTHON_STDLIB Python standard library
$PYTHON_SITE_PACKAGES Installed packages (purelib)
$PYTHON_PLATLIB Platform-specific packages
$PYTHON_PREFIX Python installation prefix
$ENV{VAR} Any environment variable

Sensitive Paths (Always Blocked)

The following paths are automatically blocked even if they match an allow rule:

  • SSH keys and GPG (~/.ssh, ~/.gnupg)
  • Cloud credentials (~/.aws, ~/.azure, ~/.config/gcloud, ~/.kube)
  • Browser data (Chrome, Firefox, Safari, Edge)
  • Password managers (1Password, Bitwarden, KeePassXC, keychains)
  • Development secrets (~/.npmrc, ~/.pypirc, ~/.netrc, ~/.git-credentials)
  • System secrets (/etc/shadow, /etc/sudoers, /etc/ssh/*_key)

Network Behavior

  • Domains in allow_domains automatically permit their resolved IPs
  • Direct IP access requires explicit allow_ips entries
  • CIDR notation supported for IP ranges
  • Port restrictions supported for both domains and IPs

HTTP URL Path Allowlisting

  • If allow_http_urls is empty, only domain-level checks apply (default behavior)
  • If allow_http_urls is configured, requests must match both domain AND URL pattern
  • Scheme (http://, https://) is optional in patterns - omit to match both
  • Glob patterns supported for paths: api.example.com/v1/*
  • Subdomain matching: example.com/api/* matches api.example.com/api/*

HTTP Method Restrictions

  • If allow_http_methods is empty, all HTTP methods are allowed
  • If configured, only listed methods are permitted (e.g., ["GET", "HEAD"])

HTTP Library Coverage

HTTP request interception covers:

  • urllib.request (stdlib)
  • http.client (stdlib)
  • urllib3
  • requests
  • httpx
  • aiohttp

Bypass note: Raw socket HTTP requests bypass library hooks but are blocked by default (allow_raw_sockets = false). The socket.connect event still captures all connections at the network level.

Hash Verification

Executables and files can include SHA256 hashes:

allow_executables = [
  { path = "/usr/bin/git", hash = "sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" },
]

How It Works

Uses Python's PEP 578 audit hooks via a C++ extension to intercept:

  • File operations (open)
  • Network requests (socket.connect, socket.getaddrinfo)
  • HTTP requests (urllib.Request + profile hooks for requests, httpx, urllib3, aiohttp, http.client)
  • Process execution (subprocess.Popen, os.exec*, os.system)
  • Library loading (ctypes.dlopen)
  • Raw socket creation (socket.__new__ with SOCK_RAW)

Protections against bypass:

  • Blocks sys.addaudithook to prevent registering competing hooks
  • Blocks sys.settrace and sys.setprofile to prevent debugger-based evasion
  • Blocks ctypes.dlopen by default to prevent loading native code that bypasses hooks

Blocked operations terminate immediately with exit code 78.

Info-Only Events

Some operations are logged for security awareness but never blocked. They help identify potentially suspicious behavior during malware analysis:

Event Description Example Output
encoding.base64 Base64 encoding/decoding Base64: b64encode
crypto.cipher Cipher encryption/decryption (cryptography library) Cipher: Encrypt
crypto.fernet Fernet encryption/decryption Fernet: encrypt

These events are always logged regardless of mode (run, force, or review) and cannot be disabled. They help identify:

  • Data exfiltration attempts (base64 encoding)
  • Ransomware behavior (encryption operations)
  • Obfuscation techniques

Limitations

  • Audit hooks cannot be bypassed from Python, but native code can
  • Here it is important to review which executables are allow-listed

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

malwi_box-0.0.4.tar.gz (46.9 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

malwi_box-0.0.4-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (78.6 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64manylinux: glibc 2.5+ x86-64

malwi_box-0.0.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (77.0 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ i686manylinux: glibc 2.5+ i686

malwi_box-0.0.4-cp313-cp313-macosx_11_0_arm64.whl (41.6 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

malwi_box-0.0.4-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (75.8 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64manylinux: glibc 2.5+ x86-64

malwi_box-0.0.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (74.2 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ i686manylinux: glibc 2.5+ i686

malwi_box-0.0.4-cp312-cp312-macosx_11_0_arm64.whl (41.6 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

malwi_box-0.0.4-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (76.5 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64manylinux: glibc 2.5+ x86-64

malwi_box-0.0.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (74.9 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ i686manylinux: glibc 2.5+ i686

malwi_box-0.0.4-cp311-cp311-macosx_11_0_arm64.whl (41.8 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

malwi_box-0.0.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (76.5 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64manylinux: glibc 2.5+ x86-64

malwi_box-0.0.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (75.0 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ i686manylinux: glibc 2.5+ i686

malwi_box-0.0.4-cp310-cp310-macosx_11_0_arm64.whl (41.8 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

Details for the file malwi_box-0.0.4.tar.gz.

File metadata

  • Download URL: malwi_box-0.0.4.tar.gz
  • Upload date:
  • Size: 46.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for malwi_box-0.0.4.tar.gz
Algorithm Hash digest
SHA256 374ce2d052732eee12bcdfa5d2dceaf2a7fce2247d30f3f6226082480c0218c1
MD5 f0f92f52270c8812973fe413a8009492
BLAKE2b-256 fb119029de8d726dffa88854155870c24981e0d5d887ade6705f08aa19233106

See more details on using hashes here.

Provenance

The following attestation bundles were made for malwi_box-0.0.4.tar.gz:

Publisher: publish.yml on canvascomputing/malwi-box

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file malwi_box-0.0.4-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for malwi_box-0.0.4-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c5019e1d82bce99edf2c387435ba24352ef9e7698dea7a551603c69665843fef
MD5 c08752e4ca862d1adfcdfaafdd2dc736
BLAKE2b-256 95762b3fe9381d2115902165c69876116509bdfbbd004ed3a28eaf6f6dd1c807

See more details on using hashes here.

Provenance

The following attestation bundles were made for malwi_box-0.0.4-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yml on canvascomputing/malwi-box

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file malwi_box-0.0.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for malwi_box-0.0.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 946356c4684fcb408f8e579a9b6dc50e148a04fd28068aeb778546ee339ae618
MD5 1f5948a0d69cc367b5c755397c44395d
BLAKE2b-256 a213fcb66200e461d51d319e0dc8880a0b3b781c158149bb7b52367d8e6f05e7

See more details on using hashes here.

Provenance

The following attestation bundles were made for malwi_box-0.0.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl:

Publisher: publish.yml on canvascomputing/malwi-box

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file malwi_box-0.0.4-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for malwi_box-0.0.4-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0307398e4e3acdadd0e21ff0f0612aee93ad1af68b71806b123add56321fcb34
MD5 f48080ce74da21744ce4e1f6e6534416
BLAKE2b-256 9648893109a16fbe3b7b0b962cbe7f14ddcf9e0ae48f41f1b7c43c0fbc1d1f05

See more details on using hashes here.

Provenance

The following attestation bundles were made for malwi_box-0.0.4-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: publish.yml on canvascomputing/malwi-box

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file malwi_box-0.0.4-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for malwi_box-0.0.4-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b38659505c678b66e9907cece8d54d75017fc02e17d6c3c3ad377e2341613001
MD5 8a2ef6dfcabfe4a5b51d964afa247623
BLAKE2b-256 e23b02de9e05a800457a6260e6c86af9b8545c92253351b274c5017d7b6729e4

See more details on using hashes here.

Provenance

The following attestation bundles were made for malwi_box-0.0.4-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yml on canvascomputing/malwi-box

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file malwi_box-0.0.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for malwi_box-0.0.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 7c6385890e407ad8754d55616069f5bae6e561700bd521a3c8317b3b9bf3dde6
MD5 465568c30ebca7b9cfb68b93ea0cfd4a
BLAKE2b-256 8618620af49eab63b65f72a9543b2ba73aece0484bbf07d0e381fc544d61ca0c

See more details on using hashes here.

Provenance

The following attestation bundles were made for malwi_box-0.0.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl:

Publisher: publish.yml on canvascomputing/malwi-box

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file malwi_box-0.0.4-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for malwi_box-0.0.4-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3c911d76fa74cbf4f46960d3de5d4db0bcc4f74b0bf74ef5c60aa3c2bf268338
MD5 131f33b6ab1f04129bd4ce08eb699615
BLAKE2b-256 185106a5abd3e3288655ba13dc95c805d1e88bd5d76adc9d0792a8ba228d387d

See more details on using hashes here.

Provenance

The following attestation bundles were made for malwi_box-0.0.4-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: publish.yml on canvascomputing/malwi-box

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file malwi_box-0.0.4-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for malwi_box-0.0.4-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 57baa90e76d20e3c9e00b1cc6aa3b4fdfd6e82c2f1e18a9785a65866fd66b03f
MD5 217155772aa7f397f9279d2f37635039
BLAKE2b-256 33ab268f56592feec05fd0165a8299ce954c263802c6ef8392bb7b41373e74cd

See more details on using hashes here.

Provenance

The following attestation bundles were made for malwi_box-0.0.4-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yml on canvascomputing/malwi-box

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file malwi_box-0.0.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for malwi_box-0.0.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 e5a40baa8281ecfec412f5c175fe8b8f0b02126fc46476497e7dd296fedfbb0f
MD5 6ca16043206a4a875abedb6442074fba
BLAKE2b-256 9cec9172ad4f526bd619b65885da816209a9fd568f21d15931761ae7a1195cf1

See more details on using hashes here.

Provenance

The following attestation bundles were made for malwi_box-0.0.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl:

Publisher: publish.yml on canvascomputing/malwi-box

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file malwi_box-0.0.4-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for malwi_box-0.0.4-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 669274799181f38a7696205fab5a26c6e77c30c134b6a3665fe71b9b8b4a4ce0
MD5 6593d2e1426d53f5e0f5600c8da8e04a
BLAKE2b-256 5a4ac42100b1accb19ca899ee601eab2a1fc1a98367c7efbb4c2806d014d0a4c

See more details on using hashes here.

Provenance

The following attestation bundles were made for malwi_box-0.0.4-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: publish.yml on canvascomputing/malwi-box

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file malwi_box-0.0.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for malwi_box-0.0.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 9a847edce9fe065c1df9add2bffe88153a6262bd2748cccb992371eceaeab009
MD5 0df48d11e9bb7b51ba9942cf9cf627a0
BLAKE2b-256 7475d87916e3b7e5c1a69a1b5abd8d1a65833e3f000384985d55386834a4097d

See more details on using hashes here.

Provenance

The following attestation bundles were made for malwi_box-0.0.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yml on canvascomputing/malwi-box

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file malwi_box-0.0.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for malwi_box-0.0.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 fa7f31c3af8b274b289993b528969b8fad0472e76b49bcbba515a86ac038d46f
MD5 0eac26ba243e1a2243da1fa5912fda2e
BLAKE2b-256 03d9e597804f35308afefeec859386696963987b85caf7f89849493e871e43ac

See more details on using hashes here.

Provenance

The following attestation bundles were made for malwi_box-0.0.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl:

Publisher: publish.yml on canvascomputing/malwi-box

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file malwi_box-0.0.4-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for malwi_box-0.0.4-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 fdc5d3d3686badf02b99007ce17d011914b068a19f1aa88fc74576b3ff29eb78
MD5 bd0194bb69c316f058db8655920322cf
BLAKE2b-256 575de090474179dd4ccad1977bc4490bfbcc05d5689097f0cdb0eeadc3370aaf

See more details on using hashes here.

Provenance

The following attestation bundles were made for malwi_box-0.0.4-cp310-cp310-macosx_11_0_arm64.whl:

Publisher: publish.yml on canvascomputing/malwi-box

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page