Skip to content

Files

Latest commit

 

History

History
64 lines (52 loc) · 3.57 KB

FAIR.md

File metadata and controls

64 lines (52 loc) · 3.57 KB

Data Validation Script for FAIR Risk Assessment of LLM Vulnerabilities

import pandas as pd

# Define a DataFrame to hold FAIR components for LLM vulnerabilities
fair_data = {
    "Vulnerability": [
        "LLM01: Prompt Injection",
        "LLM02: Insecure Output Handling",
        "LLM03: Training Data Poisoning",
        "LLM04: Model Denial of Service",
        "LLM05: Supply-Chain Vulnerabilities",
        "LLM06: Sensitive Information Disclosure",
        "LLM07: Insecure Plugin Design",
        "LLM08: Excessive Agency",
        "LLM09: Overreliance",
        "LLM10: Model Theft"
    ],
    "TEF": ["High", "Moderate", "Low to moderate", "Moderate", "Low to moderate", "Moderate", "Low to moderate", "Low", "High", "Low to moderate"],
    "VULN": ["Moderate to high", "High", "High", "Moderate to high", "High", "High", "High", "Moderate", "Not applicable", "High"],
    "COF": ["High", "Moderate", "Low", "Moderate to high", "Low", "Moderate to high", "Low", "Low", "High", "Low"],
    "POA": ["High", "Moderate", "Low to moderate", "High", "Moderate", "High", "Moderate", "Low to moderate", "Not applicable", "Moderate"],
    "LM": ["Variable", "Variable", "High", "High", "High", "High", "Variable", "Moderate to high", "Moderate to high", "High"]
}

df = pd.DataFrame(fair_data)

# Function to validate a specific vulnerability's data against FAIR components
def validate_vulnerability(vulnerability_name, tef, vuln, cof, poa, lm):
    # Find the vulnerability in the DataFrame
    vulnerability_data = df[df['Vulnerability'].str.contains(vulnerability_name)]
    if vulnerability_data.empty:
        return f"Vulnerability {vulnerability_name} not found."
    
    # Validate each component
    errors = []
    if not tef in vulnerability_data['TEF'].values[0]:
        errors.append(f"TEF mismatch for {vulnerability_name}. Expected {vulnerability_data['TEF'].values[0]}, got {tef}.")
    if not vuln in vulnerability_data['VULN'].values[0]:
        errors.append(f"VULN mismatch for {vulnerability_name}. Expected {vulnerability_data['VULN'].values[0]}, got {vuln}.")
    if not cof in vulnerability_data['COF'].values[0]:
        errors.append(f"COF mismatch for {vulnerability_name}. Expected {vulnerability_data['COF'].values[0]}, got {cof}.")
    if not poa in vulnerability_data['POA'].values[0]:
        errors.append(f"POA mismatch for {vulnerability_name}. Expected {vulnerability_data['POA'].values[0]}, got {poa}.")
    if not lm in vulnerability_data['LM'].values[0]:
        errors.append(f"LM mismatch for {vulnerability_name}. Expected {vulnerability_data['LM'].values[0]}, got {lm}.")
    
    return errors if errors else f"{vulnerability_name} data validation passed."

# Example usage
example_vulnerability = "LLM01: Prompt Injection"
example_validation = validate_vulnerability(example_vulnerability, "High", "Moderate to high", "High", "High", "Variable")
print(example_validation)

# Recommended Automated Validation Tools

- **Bandit**: A tool designed for finding common security issues in Python code. It's useful for evaluating the security aspects of the LLM codebase.

- **PyTorch Lightning**: Provides practices for more efficient and less error-prone model training. It's beneficial for ensuring best practices in model training and validation phases.

- **Great Expectations**: A tool for validating, documenting, and profiling your data to ensure it matches your expectations. It can be crucial for assessing data quality, especially for LLM03: Training Data Poisoning.

Each of these tools can be integrated into a CI/CD pipeline to ensure ongoing validation and security assessment of LLMs.