File size: 6,129 Bytes
b4d74c1
0b8f502
b4d74c1
0cbd688
b4d74c1
ccc618a
 
b4d74c1
ccc618a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0cbd688
ccc618a
0531505
ccc618a
0cbd688
ccc618a
 
 
b4d74c1
ccc618a
 
 
0cbd688
ccc618a
0cbd688
0531505
0cbd688
 
ccc618a
 
 
b4d74c1
ccc618a
 
 
 
 
 
 
 
 
 
 
b4d74c1
ccc618a
 
 
 
 
b4d74c1
ccc618a
 
 
 
 
 
 
b4d74c1
ccc618a
0531505
ec51e09
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
import streamlit as st
import pandas as pd
from fpdf import FPDF
from groq import Groq

# Initialize GROQ Client
client = Groq(api_key=st.secrets["wbm3"])

# ICS Cybersecurity Areas and Prompts
cyber_areas = {
    "ASSET MANAGEMENT": "Generate an asset inventory template for an ICS network in a [industry] facility, including fields like asset type, IP, MAC address, firmware version, and vendor.",
    "VULNERABILITY MANAGEMENT": "Design a practical patch and vulnerability management workflow for a [industry] plant that includes OT risk-based prioritization and the Now, Next, Never approach.",
    "SECURE NETWORK ARCHITECTURE": "Draw a high-level secure network architecture diagram for an [industry] facility, including IT, DMZ, and OT zones with firewalls, unidirectional gateways and data diodes.",
    "BACKUP & RECOVERY": "Write a backup and recovery strategy for PLCs and HMIs in a large [industry] plant, including storage types, validation processes and testing procedures.",
    "INCIDENT RESPONSE PLANNING": "Write a complete OT/ICS-specific incident response plan for a mid-sized [industry] plant, including roles, escalation paths, and communication protocols.",
    "SECURITY AWARENESS TRAINING": "Develop a 1-hour awareness training outline for control engineers on how to avoid common OT cybersecurity mistakes. Include real world examples from [industry].",
    "COMPLIANCE & GOVERNANCE": "Break down ISA/IEC 62443-3-3 requirements in plain language and provide an example implementation for a [industry] control room; use only information in the public domain.",
    "TABLETOP EXERCISES": "Generate a tabletop exercise for an OT cybersecurity incident in a [industry] plant based on a realistic example which has occurred at another facility in the same industry.",
    "RISK ASSESSMENT": "Create a list of the top 10 cybersecurity risks for a [industry] plant using SCADA systems, including likelihood and impact.",
    "THREAT INTEL": "Summarize the TTPs (Tactics, Techniques, and Procedures) used by attackers in past ICS/OT-related attacks, and map them to the MITRE ATT&CK for ICS matrix for [industry].",
    "NETWORK SECURITY MONITORING": "List the top 10 log sources in an OT network that would help detect early signs of a cyber attack in [industry]. Provide a list of tips & tricks on implementation and configuration.",
    "SECURE REMOTE ACCESS": "What are the recommended security controls for enabling vendor remote access to a PLC in a [industry] facility? List challenges and fixes with SRA seen at other similar facilities.",
    "THREAT HUNTING": "Write example detection rules for an OT network that alert on suspicious Modbus TCP function codes such as write coil or force listen-only mode. Provide example responses.",
    "HONEYPOTS FOR INCIDENT DETECTION": "Help me design a Modbus honeypot for an OT lab that logs all activity, maps IPs to geolocation, and mimics a real-world PLC interface.",
    "PHYSICAL SECURITY": "List the top physical security controls that should be implemented to protect critical OT systems in a [industry] facility. Include real world examples that have occurred.",
    "AWARENESS FOR EXECUTIVES": "Write a 5-slide executive briefing explaining why investing in ICS cybersecurity is critical to operational continuity and safety in [industry].",
    "METRICS": "Generate a list of meaningful KPIs and metrics to measure the maturity of an ICS/OT cybersecurity program over time in the [industry] industry.",
    "THREAT MODELING": "Perform a threat model using various methodologies for a [industry] control system connected via wireless telemetry.",
    "CAREER DEVELOPMENT": "What skills, certifications, and hands-on labs should someone focus on during their first year trying to break into ICS/OT cybersecurity?",
    "PENETRATION TESTING": "What are the top OT-specific tools and techniques to enumerate PLCs, HMIs, and RTUs safely within an ICS/OT network?"
}

# Streamlit UI
st.set_page_config(page_title="OT ICS Cybersecurity Resource Generator", layout="wide")
st.title("OT ICS Cybersecurity Resource Generator")

industry = st.text_input("Enter Industry", placeholder="e.g., Oil & Gas")
selected_area = st.selectbox("Select Cybersecurity Area", list(cyber_areas.keys()))
generate = st.button("Generate Resource")

if generate and industry and selected_area:
    with st.spinner("Generating response..."):
        prompt = cyber_areas[selected_area].replace("[industry]", industry)

        try:
            response = client.chat.completions.create(
                model="llama3-70b-8192",
                messages=[{"role": "user", "content": prompt}]
            )
            result = response.choices[0].message.content
            st.markdown("### Generated Output")
            st.text_area("Response", result, height=300)

            # Download options
            def create_pdf(text):
                pdf = FPDF()
                pdf.add_page()
                pdf.set_auto_page_break(auto=True, margin=15)
                pdf.set_font("Arial", size=12)
                for line in text.split("\n"):
                    pdf.multi_cell(0, 10, line)
                pdf_path = "/tmp/generated.pdf"
                pdf.output(pdf_path)
                return pdf_path

            def create_excel(text):
                df = pd.DataFrame([text], columns=["Content"])
                excel_path = "/tmp/generated.xlsx"
                df.to_excel(excel_path, index=False)
                return excel_path

            col1, col2 = st.columns(2)
            with col1:
                if st.download_button("📄 Download PDF", data=open(create_pdf(result), "rb"), file_name="cyber_output.pdf"):
                    st.success("PDF downloaded!")
            with col2:
                if st.download_button("📊 Download Excel", data=open(create_excel(result), "rb"), file_name="cyber_output.xlsx"):
                    st.success("Excel downloaded!")

        except Exception as e:
            st.error(f"Error: {e}")
# Footer
st.markdown("---")
st.caption("Built with ❤️ for ICSS & Controls Professionals | Created by waqasbm")