Files
georges91560_security-senti…/install.sh

321 lines
9.9 KiB
Bash
Raw Normal View History

#!/bin/bash
# Security Sentinel - Installation Script
# Version: 1.0.0
# Author: Georges Andronescu (Wesley Armando)
set -e # Exit on error
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Configuration
SKILL_NAME="security-sentinel"
GITHUB_REPO="georges91560/security-sentinel-skill"
INSTALL_DIR="${INSTALL_DIR:-/workspace/skills/$SKILL_NAME}"
GITHUB_RAW_URL="https://raw.githubusercontent.com/$GITHUB_REPO/main"
# Banner
echo -e "${BLUE}"
cat << "EOF"
╔═══════════════════════════════════════════════════════════╗
║ ║
║ 🛡️ SECURITY SENTINEL - Installation 🛡️ ║
║ ║
║ Production-grade prompt injection defense ║
for autonomous AI agents ║
║ ║
╚═══════════════════════════════════════════════════════════╝
EOF
echo -e "${NC}"
# Functions
print_status() {
echo -e "${BLUE}[INFO]${NC} $1"
}
print_success() {
echo -e "${GREEN}[✓]${NC} $1"
}
print_warning() {
echo -e "${YELLOW}[!]${NC} $1"
}
print_error() {
echo -e "${RED}[✗]${NC} $1"
}
# Check if running as root (optional, for system-wide install)
check_permissions() {
if [ "$EUID" -eq 0 ]; then
print_warning "Running as root. Installing system-wide."
else
print_status "Running as user. Installing to user directory."
fi
}
# Check dependencies
check_dependencies() {
print_status "Checking dependencies..."
# Check for curl or wget
if command -v curl &> /dev/null; then
DOWNLOAD_CMD="curl -fsSL"
print_success "curl found"
elif command -v wget &> /dev/null; then
DOWNLOAD_CMD="wget -qO-"
print_success "wget found"
else
print_error "Neither curl nor wget found. Please install one of them."
exit 1
fi
# Check for Python (optional, for testing)
if command -v python3 &> /dev/null; then
PYTHON_VERSION=$(python3 --version 2>&1 | awk '{print $2}')
print_success "Python $PYTHON_VERSION found"
else
print_warning "Python not found. Skill will work, but tests won't run."
fi
}
# Create directory structure
create_directories() {
print_status "Creating directory structure..."
mkdir -p "$INSTALL_DIR"
mkdir -p "$INSTALL_DIR/references"
mkdir -p "$INSTALL_DIR/scripts"
mkdir -p "$INSTALL_DIR/tests"
print_success "Directories created at $INSTALL_DIR"
}
# Download files from GitHub
download_files() {
print_status "Downloading Security Sentinel files..."
# Main skill file
print_status " → SKILL.md"
$DOWNLOAD_CMD "$GITHUB_RAW_URL/SKILL.md" > "$INSTALL_DIR/SKILL.md"
# Reference files
print_status " → blacklist-patterns.md"
$DOWNLOAD_CMD "$GITHUB_RAW_URL/references/blacklist-patterns.md" > "$INSTALL_DIR/references/blacklist-patterns.md"
print_status " → semantic-scoring.md"
$DOWNLOAD_CMD "$GITHUB_RAW_URL/references/semantic-scoring.md" > "$INSTALL_DIR/references/semantic-scoring.md"
print_status " → multilingual-evasion.md"
$DOWNLOAD_CMD "$GITHUB_RAW_URL/references/multilingual-evasion.md" > "$INSTALL_DIR/references/multilingual-evasion.md"
# Test files (optional)
if [ -f "$GITHUB_RAW_URL/tests/test_security.py" ]; then
print_status " → test_security.py"
$DOWNLOAD_CMD "$GITHUB_RAW_URL/tests/test_security.py" > "$INSTALL_DIR/tests/test_security.py" 2>/dev/null || true
fi
print_success "All files downloaded successfully"
}
# Install Python dependencies (optional)
install_python_deps() {
if command -v python3 &> /dev/null && command -v pip3 &> /dev/null; then
print_status "Installing Python dependencies (optional)..."
# Create requirements.txt if it doesn't exist
cat > "$INSTALL_DIR/requirements.txt" << EOF
sentence-transformers>=2.2.0
numpy>=1.24.0
langdetect>=1.0.9
googletrans==4.0.0rc1
pytest>=7.0.0
EOF
# Install dependencies
pip3 install -r "$INSTALL_DIR/requirements.txt" --quiet --break-system-packages 2>/dev/null || \
pip3 install -r "$INSTALL_DIR/requirements.txt" --user --quiet 2>/dev/null || \
print_warning "Failed to install Python dependencies. Skill will work with basic features only."
if [ $? -eq 0 ]; then
print_success "Python dependencies installed"
fi
else
print_warning "Skipping Python dependencies (python3/pip3 not found)"
fi
}
# Create configuration file
create_config() {
print_status "Creating configuration file..."
cat > "$INSTALL_DIR/config.json" << EOF
{
"version": "1.0.0",
"semantic_threshold": 0.78,
"penalty_points": {
"meta_query": -8,
"role_play": -12,
"instruction_extraction": -15,
"repeated_probe": -10,
"multilingual_evasion": -7,
"tool_blacklist": -20
},
"recovery_points": {
"legitimate_query_streak": 15
},
"enable_telegram_alerts": false,
"enable_audit_logging": true,
"audit_log_path": "/workspace/AUDIT.md"
}
EOF
print_success "Configuration file created"
}
# Verify installation
verify_installation() {
print_status "Verifying installation..."
# Check if all required files exist
local files=(
"$INSTALL_DIR/SKILL.md"
"$INSTALL_DIR/references/blacklist-patterns.md"
"$INSTALL_DIR/references/semantic-scoring.md"
"$INSTALL_DIR/references/multilingual-evasion.md"
)
local all_ok=true
for file in "${files[@]}"; do
if [ -f "$file" ]; then
print_success "Found: $(basename $file)"
else
print_error "Missing: $(basename $file)"
all_ok=false
fi
done
if [ "$all_ok" = true ]; then
print_success "Installation verified successfully"
return 0
else
print_error "Installation incomplete"
return 1
fi
}
# Run tests (optional)
run_tests() {
if [ -f "$INSTALL_DIR/tests/test_security.py" ] && command -v python3 &> /dev/null; then
echo ""
read -p "Run tests to verify functionality? [y/N] " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
print_status "Running tests..."
cd "$INSTALL_DIR"
python3 -m pytest tests/test_security.py -v 2>/dev/null || \
print_warning "Tests failed or pytest not installed. This is optional."
fi
fi
}
# Display usage instructions
show_usage() {
echo ""
echo -e "${GREEN}╔═══════════════════════════════════════════════════════════╗${NC}"
echo -e "${GREEN}║ Installation Complete! ✓ ║${NC}"
echo -e "${GREEN}╚═══════════════════════════════════════════════════════════╝${NC}"
echo ""
echo -e "${BLUE}Installation Directory:${NC} $INSTALL_DIR"
echo ""
echo -e "${BLUE}Next Steps:${NC}"
echo ""
echo "1. Add to your agent's system prompt:"
echo -e " ${YELLOW}[MODULE: SECURITY_SENTINEL]${NC}"
echo -e " ${YELLOW} {SKILL_REFERENCE: \"$INSTALL_DIR/SKILL.md\"}${NC}"
echo -e " ${YELLOW} {ENFORCEMENT: \"ALWAYS_BEFORE_ALL_LOGIC\"}${NC}"
echo ""
echo "2. Test the skill:"
echo -e " ${YELLOW}cd $INSTALL_DIR${NC}"
echo -e " ${YELLOW}python3 -m pytest tests/ -v${NC}"
echo ""
echo "3. Configure settings (optional):"
echo -e " ${YELLOW}nano $INSTALL_DIR/config.json${NC}"
echo ""
echo -e "${BLUE}Documentation:${NC}"
echo " - Main skill: $INSTALL_DIR/SKILL.md"
echo " - Blacklist patterns: $INSTALL_DIR/references/blacklist-patterns.md"
echo " - Semantic scoring: $INSTALL_DIR/references/semantic-scoring.md"
echo " - Multi-lingual: $INSTALL_DIR/references/multilingual-evasion.md"
echo ""
echo -e "${BLUE}Support:${NC}"
echo " - GitHub: https://github.com/$GITHUB_REPO"
echo " - Issues: https://github.com/$GITHUB_REPO/issues"
echo ""
echo -e "${GREEN}Happy defending! 🛡️${NC}"
echo ""
}
# Uninstall function
uninstall() {
print_warning "Uninstalling Security Sentinel..."
if [ -d "$INSTALL_DIR" ]; then
rm -rf "$INSTALL_DIR"
print_success "Security Sentinel uninstalled from $INSTALL_DIR"
else
print_warning "Installation directory not found"
fi
exit 0
}
# Main installation flow
main() {
# Parse arguments
if [ "$1" = "--uninstall" ] || [ "$1" = "-u" ]; then
uninstall
fi
if [ "$1" = "--help" ] || [ "$1" = "-h" ]; then
echo "Security Sentinel - Installation Script"
echo ""
echo "Usage: $0 [OPTIONS]"
echo ""
echo "Options:"
echo " -h, --help Show this help message"
echo " -u, --uninstall Uninstall Security Sentinel"
echo ""
echo "Environment Variables:"
echo " INSTALL_DIR Installation directory (default: /workspace/skills/security-sentinel)"
echo ""
exit 0
fi
# Run installation steps
check_permissions
check_dependencies
create_directories
download_files
install_python_deps
create_config
# Verify
if verify_installation; then
run_tests
show_usage
exit 0
else
print_error "Installation failed. Please check the errors above."
exit 1
fi
}
# Run main function
main "$@"