Securing FrameworX deployments for production environments.
Parent Page: Deployment (Reference)
Security Checklist
System Level
- Operating system hardened and patched
- Unnecessary services disabled
- Firewall configured with minimal ports
- Antivirus exclusions for FrameworX folders
- User accounts with minimal privileges
- Audit logging enabled
Application Level
- Default passwords changed
- SSL/TLS enabled for all connections
- Authentication required for all access
- Role-based access control configured
- Secure communication with devices
- Encrypted database connections
Authentication Configuration
Windows Authentication
For domain environments:
xml
<authentication mode="Windows">
<domain>COMPANY</domain>
<allowedGroups>
<group>SCADA_Operators</group>
<group>SCADA_Engineers</group>
</allowedGroups>
</authentication>
Forms Authentication
For non-domain:
xml
<authentication mode="Forms">
<passwordPolicy>
<minLength>12</minLength>
<requireUppercase>true</requireUppercase>
<requireNumbers>true</requireNumbers>
<requireSpecialChars>true</requireSpecialChars>
<expirationDays>90</expirationDays>
</passwordPolicy>
</authentication>
Multi-Factor Authentication
Configure MFA provider:
xml
<mfa enabled="true">
<provider>AzureAD</provider>
<timeout>300</timeout>
</mfa>
Network Security
SSL/TLS Configuration
Generate Certificate:
powershell
New-SelfSignedCertificate `
-DnsName "scada.company.com" `
-CertStoreLocation "cert:\LocalMachine\My"
Bind to Service:
cmd
netsh http add sslcert ipport=0.0.0.0:10108
certhash=<thumbprint>
appid={12345678-1234-1234-1234-123456789012}
Firewall Rules
Minimal Access:
powershell
# Remove default allow-all
Remove-NetFirewallRule -DisplayName "FrameworX*"
# Add specific rules
New-NetFirewallRule -DisplayName "FrameworX Clients" `
-Direction Inbound -Protocol TCP -LocalPort 10108 `
-RemoteAddress 192.168.1.0/24 -Action Allow
Access Control
Role-Based Security
Define Roles:
xml
<roles>
<role name="Operator">
<permissions>
<allow>Display.View</allow>
<allow>Alarms.Acknowledge</allow>
<deny>Configuration.*</deny>
</permissions>
</role>
<role name="Engineer">
<permissions>
<allow>*</allow>
<deny>Security.Modify</deny>
</permissions>
</role>
</roles>
Tag Security
Protect critical tags:
xml
<tagSecurity>
<tag name="Emergency_Stop">
<writeAccess>Engineers,Supervisors</writeAccess>
<audit>true</audit>
</tag>
</tagSecurity>
Data Protection
Database Encryption
SQL Server TDE:
sql
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'StrongPassword123!';
CREATE CERTIFICATE FrameworXCert WITH SUBJECT = 'FrameworX TDE';
CREATE DATABASE ENCRYPTION KEY WITH ALGORITHM = AES_256
ENCRYPTION BY SERVER CERTIFICATE FrameworXCert;
ALTER DATABASE FrameworX SET ENCRYPTION ON;
Communication Encryption
Device Connections:
xml
<deviceSecurity>
<protocol name="OPC_UA">
<security>SignAndEncrypt</security>
<certificate>device-cert.pfx</certificate>
</protocol>
</deviceSecurity>
Audit and Compliance
Audit Configuration
xml
<audit enabled="true">
<events>
<login>true</login>
<logout>true</logout>
<configChange>true</configChange>
<tagWrite>true</tagWrite>
<alarmAck>true</alarmAck>
</events>
<storage>
<path>C:\Logs\Audit\</path>
<retention>365</retention>
</storage>
</audit>
Compliance Reports
Generate for:
- NERC CIP
- ISO 27001
- FDA 21 CFR Part 11
Hardening Guidelines
Windows Server
powershell
# Disable unnecessary services
Stop-Service -Name "Spooler"
Set-Service -Name "Spooler" -StartupType Disabled
# Configure security policies
secedit /configure /db security.sdb /cfg security.inf
# Enable Windows Defender
Set-MpPreference -DisableRealtimeMonitoring $false
Linux Server
bash
# Disable root login
sed -i 's/PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
# Configure firewall
ufw default deny incoming
ufw allow from 192.168.1.0/24 to any port 10108
ufw enable
# Set file permissions
chmod 750 /opt/frameworkx
chown -R frameworkx:frameworkx /opt/frameworkx
Incident Response
Security Monitoring
Monitor for:
- Failed login attempts > 5
- Configuration changes
- Unusual tag write patterns
- Network scanning attempts
Response Plan
- Detection: Alert on security event
- Containment: Isolate affected system
- Investigation: Review audit logs
- Recovery: Restore from backup
- Documentation: Update security procedures