AMP • TR
Zero Trust Security Model, Never Trust Always Verify, micro-segmentation, identity-based security implementation 2025.
"Never Trust, Always Verify" - Geleneksel perimeter-based güvenlik modeli artık yetersiz. Zero Trust Architecture (ZTA) geleceğin güvenlik modeli.
Traditional Security:
Internet ─→ Firewall ─→ [Trusted Internal Network]
└─ Servers, Users, Data
Problem: Perimeter'i geçen her şey güvenilir kabul edilir.
Zero Trust:
Internet ─→ Identity Verification ─→ Device Check ─→
Context Analysis ─→ Least Privilege Access ─→ Resource
Principle: Hiçbir şeye varsayılan olarak güvenme.
Every access request must be:
✓ Authenticated (Who?)
✓ Authorized (What can they do?)
✓ Encrypted (Secure channel?)
✓ Inspected (Threat check?)
User permissions:
❌ Full admin access
✅ Just enough for the task
✅ Time-limited
✅ Context-aware
Design as if:
• Attackers are already inside
• Every network is hostile
• Continuous monitoring required
┌─────────────────────────────────────────┐
│ 1. Identity & Access Management (IAM) │
│ - Multi-factor authentication │
│ - Conditional access policies │
│ - Privileged access management │
├─────────────────────────────────────────┤
│ 2. Device Security │
│ - Endpoint detection (EDR) │
│ - Device compliance check │
│ - Mobile device management (MDM) │
├─────────────────────────────────────────┤
│ 3. Network Segmentation │
│ - Micro-segmentation │
│ - Software-defined perimeter (SDP) │
│ - Zero Trust Network Access (ZTNA) │
├─────────────────────────────────────────┤
│ 4. Data Protection │
│ - Encryption (rest & transit) │
│ - Data loss prevention (DLP) │
│ - Information rights management │
├─────────────────────────────────────────┤
│ 5. Threat Protection │
│ - SIEM/SOAR │
│ - Threat intelligence │
│ - Behavioral analytics (UEBA) │
└─────────────────────────────────────────┘
# Asset discovery
import nmap
import socket
def discover_assets(network):
nm = nmap.PortScanner()
nm.scan(hosts=network, arguments='-sn')
assets = []
for host in nm.all_hosts():
asset = {
'ip': host,
'hostname': socket.getfqdn(host),
'status': nm[host].state(),
'last_seen': datetime.now()
}
assets.append(asset)
return assets
# User activity monitoring
def monitor_user_activity(user_id):
activities = db.query("""
SELECT
timestamp,
action,
resource,
location,
device
FROM user_activities
WHERE user_id = %s
ORDER BY timestamp DESC
LIMIT 100
""", user_id)
# Detect anomalies
anomalies = detect_anomalies(activities)
if anomalies:
alert_security_team(user_id, anomalies)
# Kubernetes Network Policy
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: db-access-policy
namespace: production
spec:
podSelector:
matchLabels:
app: database
policyTypes:
- Ingress
- Egress
ingress:
# Only allow API server
- from:
- podSelector:
matchLabels:
app: api-server
ports:
- protocol: TCP
port: 5432
egress:
# Block all outbound
- to:
- podSelector:
matchLabels:
app: backup-service
// Microsoft Azure AD Conditional Access
const policy = {
displayName: "Require MFA for admins",
state: "enabled",
conditions: {
users: {
includeRoles: [
"62e90394-69f5-4237-9190-012177145e10" // Global Admin
]
},
applications: {
includeApplications: ["All"]
},
locations: {
excludeLocations: ["AllTrusted"] // Office network
},
deviceStates: {
includeStates: ["All"],
excludeStates: ["Compliant", "DomainJoined"]
}
},
grantControls: {
operator: "AND",
builtInControls: [
"mfa", // Multi-factor auth
"compliantDevice" // Device compliance
]
},
sessionControls: {
signInFrequency: {
value: 1,
type: "hours"
}
}
};
# Risk-based authentication
def evaluate_access_request(request):
risk_score = 0
# 1. User behavior analysis
if is_unusual_location(request.user, request.location):
risk_score += 30
if is_unusual_time(request.user, request.timestamp):
risk_score += 20
# 2. Device posture check
if not is_device_compliant(request.device_id):
risk_score += 40
if not is_device_encrypted(request.device_id):
risk_score += 30
# 3. Resource sensitivity
resource_sensitivity = get_resource_sensitivity(request.resource)
risk_score += resource_sensitivity * 0.5
# 4. Threat intelligence
if is_ip_suspicious(request.ip):
risk_score += 50
# Decision
if risk_score < 30:
return "ALLOW"
elif risk_score < 70:
return "MFA_REQUIRED"
else:
return "DENY"
# Usage
decision = evaluate_access_request(request)
if decision == "ALLOW":
grant_access(request)
elif decision == "MFA_REQUIRED":
require_mfa(request)
else:
deny_access(request)
alert_security_team(request)
# Cloudflare Access policy
policies:
- name: "Production Database"
decision: allow
include:
- email_domain:
domain: company.com
- group:
id: "dba-team"
require:
- mfa: true
- country:
country_code: ["US", "GB"]
exclude:
- email:
email: contractor@external.com
application:
domain: db.company.internal
session_duration: 4h
purpose_justification:
required: true
prompt: "Why do you need database access?"
# SDP Controller
class SDPController:
def authenticate_client(self, client_id, credentials):
# 1. Verify identity
user = self.iam.verify_credentials(credentials)
if not user:
return None
# 2. Check device posture
device = self.device_manager.get_device(client_id)
if not device.is_compliant():
return None
# 3. Evaluate context
risk = self.risk_engine.evaluate(user, device)
if risk > THRESHOLD:
return None
# 4. Generate SPA packet
spa_packet = self.generate_spa_packet(user, device)
return spa_packet
def generate_spa_packet(self, user, device):
# Single Packet Authorization
return {
'user_id': user.id,
'device_id': device.id,
'timestamp': time.time(),
'authorized_services': user.get_authorized_services(),
'ttl': 3600, # 1 hour
'signature': self.sign(user, device)
}
-- User and Entity Behavior Analytics (UEBA)
WITH user_baseline AS (
SELECT
user_id,
AVG(login_count) as avg_logins,
STDDEV(login_count) as stddev_logins,
AVG(data_download_mb) as avg_download,
STDDEV(data_download_mb) as stddev_download
FROM daily_user_activity
WHERE date >= CURRENT_DATE - INTERVAL '30 days'
GROUP BY user_id
),
today_activity AS (
SELECT
user_id,
COUNT(*) as login_count,
SUM(data_download_mb) as data_download_mb
FROM user_activities
WHERE date = CURRENT_DATE
GROUP BY user_id
)
-- Detect anomalies (> 3 standard deviations)
SELECT
t.user_id,
t.login_count,
b.avg_logins,
(t.login_count - b.avg_logins) / b.stddev_logins as login_z_score,
t.data_download_mb,
b.avg_download,
(t.data_download_mb - b.avg_download) / b.stddev_download as download_z_score
FROM today_activity t
JOIN user_baseline b ON t.user_id = b.user_id
WHERE
ABS((t.login_count - b.avg_logins) / b.stddev_logins) > 3
OR ABS((t.data_download_mb - b.avg_download) / b.stddev_download) > 3;
Month 1-2: Assessment
Month 3-4: Quick Wins
Month 5-8: Core Implementation
Month 9-12: Advanced
Security Benefits:
Business Benefits:
Cost Savings:
Zero Trust implementation: iletisim@cesayazilim.com 🛡️