Kamailio SIP Server
SIP Firewall For Carrier Grade Traffic
Daniel-Constantin Mierla
Co-Founder Kamailio
www.kamailio.org
www.asipto.com
(c) asipto.com 2
Over 10 Years Evolution
2002 Jun 2005 Jul 2008 Aug 2008 Nov 2008
SIP Express Router (SER)
OpenSER Kamailio
Other Forks...
Same application: Kamailio - SER
Oct 2009 Jan 2010
v3.0.0
Integration
Completed
v1.5.0
Oct 2011
v3.1.0
Sep 2001
First
Line
Of
Code
Open
Source
GPL
FhG
Fokus
Institute
Berlin
rename
v3.2.0
Oct 2010
Awarded
Best Open
Source
Networking
Software
2009
By InfoWorld
10
Years
Jun 2012
v3.3.0
ITSPA
UK
Award
Mar 2013
v4.0.0
Kamailio
Source Structure - 3.x.x - Kamailio vs. SER
3
KamailioDistribution
SIPExpressRouterDistribution
modules_k/
acc
acc_radius
alias_db
auth_db
auth_diameter
auth_radius
benchmark
call_control
cfgutils
cpl-c
db_cluster
...
over 80 modules
modules/
app_lua
app_mono
app_python
async
auth
auth_identity
avpops
blst
carrierroute
cfg_db
cfg_rpc
...
over 50 modules
modules_s/
acc_db
acc_radius
acc_syslog
auth_db
auth_radius
avp
avp_db
avp_radius
bdb
cpl-c
db_ops
...
over 40 modules
the entire source code tree
core
sip parser - memory manager
config file parser and interpreter
locking system - timers
config variable frameworks
internal libraries
DB API v1 - DB APIv2
MI API - JSON - UUID
utils - binrpc
Source Structure - 4.x.x- Kamailio
4
KamailioDistribution
SIPExpressRouterDistribution
modules_k/ modules/
app_lua
app_mono
app_python
async
auth
auth_identity
avpops
blst
carrierroute
cfg_db
cfg_rpc
...
over 150 modules
modules_s/
the entire source code tree
core
sip parser - memory manager
config file parser and interpreter
locking system - timers
config variable frameworks
internal libraries
DB API v1 - DB APIv2
MI API - JSON - UUID
utils - binrpc
(c) asipto.com
2012 - Highlights
5
Over 10 IMS Extensions
Websockets
generic
database
clusteringembedded mono interpreter
C#, Python, Java, ....
cassandra connector
http://www.kamailio.org/wiki/features/new-in-3.3.x
http://www.kamailio.org/wiki/features/new-in-4.0.x
IPv6
review
embedded
MSRP Relay
time recurrence
matching
embedded HTTP
RPC/Provisioning
APIs
presence/rls/xcap
OMA/RCS
enhancements
GRUU
SIP Outbound
SCA
(c) asipto.com
2013 - Highlights
6
app_java
sipt
tm
htable
cfgutils
siputilssnmpstats
usrloc
http://www.kamailio.org/wiki/features/new-in-devel
dnssec
cnxcc
(prepaid)
stun
sctp
auth_ephemeral
(webrtc)
debugger
(log pv assignment)
(c) asipto.com 7
Development statistics
(c) asipto.com 8
http://conference.kamailio.com
(c) asipto.com 9
among next cool things
Kamailio - SIP Firewall for Carrier Grade Traffic
Routing SIP with Kamailio
by
Daniel-Constantin Mierla
Elena-Ramona Modroiu
13
Book Details - http://asipto.com/u/kab
 Evolution
 started last year for v3.3.x
 target: getting started guide and typical use cases
 delayed by decision to complete Kamailio-SER integration (then Kamailio Word)
 last modules merged, some renamed
 significant changes in installation process
 Nowadays
 existing content
 over 280 pages (A4) - apart of ToC
 22 chapters
 roadmap to full release
 3-5 new chapters
 check the 3.3 to 4.0 updates
 examples enhanced with SIP traces
 reviews (both native and non-native English speakers)
 Selling
 electronic format (e.g., pdf, ebook), later paper format (if such interest)
 plans to make it available to purchase before full release
 if all goes as expected - as soon as mid of August, 2013
SIP Firewall For Carrier Grade Traffic
blocking unwanted traffic
15
Everyone is evil
in the
world wild sipnet!
16
request_route {
drop;
}
reply_route {
drop;
}
Full Kamailio Config to Deal With
17
Problem	 completely	 solved!
Thank	 you,	 questions?
18
Trying to get friendlier - DoS Attacks
• bandwidth
• cpu
• memory
• MONEY
19
Attacks
 malicious attacks
 for direct attacker benefits
 get access to the host and call for free
 for damages on target (or fame)
 consume resources on target
 involuntary attacks
 client side
 broken clients
 server side
 misconfigurations (e.g., too low max expire time)
‘Undisclosed’ sources have demonstrated that the root of the issues
in computer science resides in between chair and keyboard.
20
 Problem
 unexpected high volume of SIP traffic from the same IP address
 Situations
 someone tries to gain access to the server
 misconfigured devices
 Solution
 keep the list of banned IP addresses in memory (hash table via htable module)
 items in hash table are automatically deleted if their values are not updated for a while
 if source IP of the SIP packet matches a key in hash table, then stop processing
 simply drop, no SIP response (save the bandwidth)
 sending a 200 OK response makes the attacker believe that it has succeeded
 if not, then count the number of packets per configured time interface
 if limit exceeded, stop processing and add add the source ip in the hash table
 Consideration
 skip trusted peers from checking (trunks, PSTN gateways, media servers,...)
 do it very early in processing path, at the top of routing logic
Flood Detection and Blocking IP Addresses
21
Flood Detection and Blocking IP Addresses
	

 if(src_ip!=__TRUSTED__)
	

 {
	

 	

 if($sht(ipban=>$si)!=$null)
	

 	

 {
	

 	

 	

 # ip is already blocked
	

 	

 	

 xdbg("request from blocked IP - $rm from $fu (IP:$si:$sp)n");
	

 	

 	

 exit;
	

 	

 }
	

 	

 if (!pike_check_req())
	

 	

 {
	

 	

 	

 xlog("L_ALERT","ALERT: pike blocking $rm from $fu (IP:$si:$sp)n");
	

 	

 	

 $sht(ipban=>$si) = 1;
	

 	

 	

 exit;
	

 	

 }
	

 }
loadmodule "htable.so"
loadmodule "pike.so"
# ----- pike params -----
modparam("pike", "sampling_time_unit", 2)
modparam("pike", "reqs_density_per_unit", 24)
modparam("pike", "remove_latency", 4)
# ----- htable params -----
# ip ban htable with autoexpire after 5 minutes
modparam("htable", "htable", "ipban=>size=8;autoexpire=300;")
the configuration
22
 Problem
 unexpected number of failed authentication for various users
 Situations
 someone tries to guess passwords for legit users
 misconfigured devices
 Solution
 keep the list of blocked usernames in memory (again via htable module)
 items in hash table are automatically deleted if their values are not updated for a while
 along with the username, store the timestamp of the last failed authentication and
number of failed authentication in a raw
 if the request has auth headers and username is found in hash table, then
 if the last failed authentication is older than a predefined interval of time, give the user
another chance
 otherwise forbids the traffic without any authentication challenge sent back
 if not found in hash table, then authenticate
 if credentials mismatch, then increase the authentication failure counter and update the
last authentication failure timestamp
 if authentication failure attempts limit is reached, don’t challenge back
 if authentication is ok, reset the counter
Dictionary Attack Detection and Blocking Users
23
Dictionary Attack Detection and Blocking Users
	

 	

 if(is_present_hf("Authorization") || is_present_hf("Proxy-Authorization"))
	

 	

 {
	

 	

 	

 if($sht(userban=>$au::auth_count)==3)
	

 	

 	

 {
	

 	

 	

 	

 $var(exp) = $Ts - 900;
	

 	

 	

 	

 if($sht(userban=>$au::last_auth) > $var(exp))
	

 	

 	

 	

 {
	

 	

 	

 	

 	

 sl_send_reply("403", "Try later");
	

 	

 	

 	

 	

 exit;
	

 	

 	

 	

 } else {
	

 	

 	

 	

 	

 $sht(userban=>$au::auth_count) = 0;
	

 	

 	

 	

 }
	

 	

 	

 }
	

 	

 }
modparam("htable", "htable", "ipban=>size=8;autoexpire=300;")
the configuration
24
	

 	

 # authenticate requests
	

 	

 auth_check("$fd", "subscriber", "1");
	

 	

 $var(rc) = $rc;
	

 	

 if($var(rc)<0) {
	

 	

 	

 switch($var(rc)) {
	

 	

 	

 	

 case -1:
	

 	

 	

 	

 	

 sl_send_reply("403", "Forbidden");
	

 	

 	

 	

 	

 exit;
	

 	

 	

 	

 case -2:
	

 	

 	

 	

 	

 $var(auth_count) = $shtinc(userban=>$au::auth_count);
	

 	

 	

 	

 	

 if($var(auth_count) == 3)
	

 	

 	

 	

 	

 	

 xlog("auth failed 3rd time - src ip: $sin");
	

 	

 	

 	

 	

 $sht(userban=>$au::last_auth) = $Ts;
	

 	

 	

 	

 	

 break;
	

 	

 	

 }
	

 	

 	

 auth_challenge("$fd", "0");
	

 	

 	

 exit;
	

 	

 }
	

 	

 $sht(userban=>$au::auth_count) = 0;
Dictionary Attack Detection and Blocking Users
25
 Problem
 an attacker could eventually get access in way or another (e.g., social
engineering), then limit the damages as much as possible
 Situations
 lot of active calls from same user, which physically could not do that
 Solution
 keep a lightweight list of active calls in memory (again via htable module)
 items in hash table are automatically deleted if their values are not updated for a while
(cope with missing BYE cases)
 items are added when the call is initiated
 items are removed if no positive answer for INVITE or in case of BYE
 carrier grade => lightweight dialog tracking
 Call-ID is the key for hash table
 the value of items in hash table is caller id (username)
 when a new call comes in
 count the values in the hash table that matches the caller id
 if the limit is not reached, add a new item, otherwise deny the call
Limiting the Number of Active Calls Per User
26
request_route {
....
if(is_method(“BYE”)) {
$sht(acalls=>$ci) = $null;
}
....
}
reply_route {
....
if(is_method(“INVITE”) && $rs>=300) {
$sht(acalls=>$ci) = $null;
}
....
}
modparam("htable", "htable", "acalls=>size=8;autoexpire=7200;")
modparam(“cfgutils”, “lock_set_size”, 8)the configuration
Limiting the Number of Active Calls Per User
27
# limit to maximum 3 active calls per user
route[ACLIMIT] {
if(is_method(“INVITE”) && !has_totag()) {
lock(“$fU”);
$var(ac) = $shtcv(acalls=>eq$fU);
if($var(ac) >= 3) {
unlock(“$fU”);
send_reply(“403”, “Too many active calls”);
exit;
}
$sht(acalls=>$ci) = $fU;
unlock(“$fU”);
}
}
request_route {
....
route(ACLIMIT);
route(RELAY);
}
Limiting the Number of Active Calls Per User
28
 One of Kamailio laws
 If htable module is not used, something might go wrong with your deployment
(and business) at a point in time.
 The target for solutions were
 rely on Kamailio-only
 use the lightweight solutions that scale a lot
 Alternatives
 real time integration with firewall for DoS protection using fail2ban
 http://kb.asipto.com/kamailio:usage:k31-sip-scanning-attack
 active calls tracking
 dialog module: store lot of details for each call, but can detect when call is down
 OPTIONS keepalives within dialog
 it is not a back to back user agent (i.e, cseq numbers of dialog not updated)
 in memory SQL tables via sqlops modules
 easy to customize make reports and specify what details are store per dialog
Remarks
29
Daniel-Constantin Mierla
Co-Founder Kamailio
http://www.asipto.com
daniel@asipto.com
Thank you!
Questions?
twitter: @miconda
http://www.linkedin.com/in/miconda

More Related Content

PDF
Kamailio on Docker
ODP
Expanding Asterisk with Kamailio
PDF
Kamailio, FreeSWITCH, and You
PDF
Sipwise rtpengine
PDF
Kamailio - Secure Communication
PDF
SIP Attack Handling (Kamailio World 2021)
PDF
Kamailio :: A Quick Introduction
PDF
rtpengine and kamailio - or how to simulate calls at scale
Kamailio on Docker
Expanding Asterisk with Kamailio
Kamailio, FreeSWITCH, and You
Sipwise rtpengine
Kamailio - Secure Communication
SIP Attack Handling (Kamailio World 2021)
Kamailio :: A Quick Introduction
rtpengine and kamailio - or how to simulate calls at scale

What's hot (20)

PDF
Kamailio with Docker and Kubernetes
PDF
Scaling Asterisk with Kamailio
PDF
Kamailio - API Based SIP Routing
ODP
Phpconf 2013 - Agile Telephony Applications with PAMI and PAGI
PDF
Introduction to FreeSWITCH
PDF
Kamailio - Large Unified Communication Platforms
PDF
rtpengine - Media Relaying and Beyond
PPT
Sip Detailed , Call flows , Architecture descriptions , SIP services , sip se...
PPTX
Introduction to Kamailio (TADSummit 2020 Asia)
PDF
SIPREC RTPEngine Media Forking
PDF
Scaling FreeSWITCH Performance
PPTX
Barry Hesk: Cisco Unified Communications Manager training deck 1
PPT
PDF
SIP (Session Initiation Protocol)
PDF
Applications secure by default
PDF
Telecom security from ss7 to all ip all-open-v3-zeronights
ODP
Using Asterisk and Kamailio for Reliable, Scalable and Secure Communication S...
PDF
SDWAN vs MPLS: What Enterprises need?
PDF
VoIP Wars: Attack of the Cisco Phones
PDF
Palo alto networks product overview
Kamailio with Docker and Kubernetes
Scaling Asterisk with Kamailio
Kamailio - API Based SIP Routing
Phpconf 2013 - Agile Telephony Applications with PAMI and PAGI
Introduction to FreeSWITCH
Kamailio - Large Unified Communication Platforms
rtpengine - Media Relaying and Beyond
Sip Detailed , Call flows , Architecture descriptions , SIP services , sip se...
Introduction to Kamailio (TADSummit 2020 Asia)
SIPREC RTPEngine Media Forking
Scaling FreeSWITCH Performance
Barry Hesk: Cisco Unified Communications Manager training deck 1
SIP (Session Initiation Protocol)
Applications secure by default
Telecom security from ss7 to all ip all-open-v3-zeronights
Using Asterisk and Kamailio for Reliable, Scalable and Secure Communication S...
SDWAN vs MPLS: What Enterprises need?
VoIP Wars: Attack of the Cisco Phones
Palo alto networks product overview
Ad

Similar to Kamailio - SIP Firewall for Carrier Grade Traffic (20)

PPTX
Security in NodeJS applications
PDF
Kamailio - Surfing Big Waves Of SIP With Style
PDF
The top 10 security issues in web applications
PDF
Applications secure by default
PPTX
Swift distributed tracing method and tools v2
PDF
112 portfpres.pdf
PPTX
Let's write secure Drupal code! - DrupalCamp London 2019
PPTX
Strata Presentation: One Billion Objects in 2GB: Big Data Analytics on Small ...
PDF
Secure .NET programming
PDF
Presto anatomy
PDF
Monitoring with Prometheus
PPT
Secure Programming
PDF
2012.09 A Million Mousetraps: Using Big Data and Little Loops to Build Better...
PDF
Webinar elastic stack {on telecom} english webinar part (1)
PDF
Streaming Way to Webscale: How We Scale Bitly via Streaming
PPT
Integris Security - Hacking With Glue ℠
PDF
Kamailio and VoIP Wild World
PDF
Kamailio and VoIP Wild World
PPTX
Secure Coding for NodeJS
PDF
MySQL server security
Security in NodeJS applications
Kamailio - Surfing Big Waves Of SIP With Style
The top 10 security issues in web applications
Applications secure by default
Swift distributed tracing method and tools v2
112 portfpres.pdf
Let's write secure Drupal code! - DrupalCamp London 2019
Strata Presentation: One Billion Objects in 2GB: Big Data Analytics on Small ...
Secure .NET programming
Presto anatomy
Monitoring with Prometheus
Secure Programming
2012.09 A Million Mousetraps: Using Big Data and Little Loops to Build Better...
Webinar elastic stack {on telecom} english webinar part (1)
Streaming Way to Webscale: How We Scale Bitly via Streaming
Integris Security - Hacking With Glue ℠
Kamailio and VoIP Wild World
Kamailio and VoIP Wild World
Secure Coding for NodeJS
MySQL server security
Ad

More from Daniel-Constantin Mierla (17)

PDF
FOSDEM 2017 - RTC Services With Lua and Kamailio
PDF
TAD Summit 2016 - The Mobile World Up Side Down
PDF
Snappy Kamailio
PDF
Kamailio Updates - VUC 588
PDF
Designing High Performance RTC Signaling Servers
PDF
SIP Server Optimizations for Mobile Networks
PDF
Kamailio - SIP Routing in Lua
PDF
10 Years SER - Awards
PDF
Sculpturing SIP World
PDF
CPDL - Charging Plan Definition Language
PDF
SER - SIP Express Router
PDF
SIP Router Project
PDF
Kamailio - Unifying SIP and Web Worlds with Lua
PDF
Kamailio - SIP Servers Everywhere
PDF
Kamailio - The Story for Asterisk
PDF
Kamailio - Load Balancing Load Balancers
PDF
Aynchronous Processing in Kamailio Configuration File
FOSDEM 2017 - RTC Services With Lua and Kamailio
TAD Summit 2016 - The Mobile World Up Side Down
Snappy Kamailio
Kamailio Updates - VUC 588
Designing High Performance RTC Signaling Servers
SIP Server Optimizations for Mobile Networks
Kamailio - SIP Routing in Lua
10 Years SER - Awards
Sculpturing SIP World
CPDL - Charging Plan Definition Language
SER - SIP Express Router
SIP Router Project
Kamailio - Unifying SIP and Web Worlds with Lua
Kamailio - SIP Servers Everywhere
Kamailio - The Story for Asterisk
Kamailio - Load Balancing Load Balancers
Aynchronous Processing in Kamailio Configuration File

Recently uploaded (20)

PDF
Five Habits of High-Impact Board Members
PDF
ENT215_Completing-a-large-scale-migration-and-modernization-with-AWS.pdf
PDF
A Late Bloomer's Guide to GenAI: Ethics, Bias, and Effective Prompting - Boha...
PDF
Transform Your ITIL® 4 & ITSM Strategy with AI in 2025.pdf
PPTX
The various Industrial Revolutions .pptx
PDF
Microsoft Solutions Partner Drive Digital Transformation with D365.pdf
PDF
How ambidextrous entrepreneurial leaders react to the artificial intelligence...
PDF
Unlock new opportunities with location data.pdf
PDF
A review of recent deep learning applications in wood surface defect identifi...
PPTX
O2C Customer Invoices to Receipt V15A.pptx
PDF
Architecture types and enterprise applications.pdf
PDF
Hindi spoken digit analysis for native and non-native speakers
PPT
Module 1.ppt Iot fundamentals and Architecture
PDF
Univ-Connecticut-ChatGPT-Presentaion.pdf
PDF
A comparative study of natural language inference in Swahili using monolingua...
PPTX
Group 1 Presentation -Planning and Decision Making .pptx
PDF
sustainability-14-14877-v2.pddhzftheheeeee
PPTX
Web Crawler for Trend Tracking Gen Z Insights.pptx
PDF
August Patch Tuesday
PDF
Getting started with AI Agents and Multi-Agent Systems
Five Habits of High-Impact Board Members
ENT215_Completing-a-large-scale-migration-and-modernization-with-AWS.pdf
A Late Bloomer's Guide to GenAI: Ethics, Bias, and Effective Prompting - Boha...
Transform Your ITIL® 4 & ITSM Strategy with AI in 2025.pdf
The various Industrial Revolutions .pptx
Microsoft Solutions Partner Drive Digital Transformation with D365.pdf
How ambidextrous entrepreneurial leaders react to the artificial intelligence...
Unlock new opportunities with location data.pdf
A review of recent deep learning applications in wood surface defect identifi...
O2C Customer Invoices to Receipt V15A.pptx
Architecture types and enterprise applications.pdf
Hindi spoken digit analysis for native and non-native speakers
Module 1.ppt Iot fundamentals and Architecture
Univ-Connecticut-ChatGPT-Presentaion.pdf
A comparative study of natural language inference in Swahili using monolingua...
Group 1 Presentation -Planning and Decision Making .pptx
sustainability-14-14877-v2.pddhzftheheeeee
Web Crawler for Trend Tracking Gen Z Insights.pptx
August Patch Tuesday
Getting started with AI Agents and Multi-Agent Systems

Kamailio - SIP Firewall for Carrier Grade Traffic

  • 1. Kamailio SIP Server SIP Firewall For Carrier Grade Traffic Daniel-Constantin Mierla Co-Founder Kamailio www.kamailio.org www.asipto.com
  • 2. (c) asipto.com 2 Over 10 Years Evolution 2002 Jun 2005 Jul 2008 Aug 2008 Nov 2008 SIP Express Router (SER) OpenSER Kamailio Other Forks... Same application: Kamailio - SER Oct 2009 Jan 2010 v3.0.0 Integration Completed v1.5.0 Oct 2011 v3.1.0 Sep 2001 First Line Of Code Open Source GPL FhG Fokus Institute Berlin rename v3.2.0 Oct 2010 Awarded Best Open Source Networking Software 2009 By InfoWorld 10 Years Jun 2012 v3.3.0 ITSPA UK Award Mar 2013 v4.0.0 Kamailio
  • 3. Source Structure - 3.x.x - Kamailio vs. SER 3 KamailioDistribution SIPExpressRouterDistribution modules_k/ acc acc_radius alias_db auth_db auth_diameter auth_radius benchmark call_control cfgutils cpl-c db_cluster ... over 80 modules modules/ app_lua app_mono app_python async auth auth_identity avpops blst carrierroute cfg_db cfg_rpc ... over 50 modules modules_s/ acc_db acc_radius acc_syslog auth_db auth_radius avp avp_db avp_radius bdb cpl-c db_ops ... over 40 modules the entire source code tree core sip parser - memory manager config file parser and interpreter locking system - timers config variable frameworks internal libraries DB API v1 - DB APIv2 MI API - JSON - UUID utils - binrpc
  • 4. Source Structure - 4.x.x- Kamailio 4 KamailioDistribution SIPExpressRouterDistribution modules_k/ modules/ app_lua app_mono app_python async auth auth_identity avpops blst carrierroute cfg_db cfg_rpc ... over 150 modules modules_s/ the entire source code tree core sip parser - memory manager config file parser and interpreter locking system - timers config variable frameworks internal libraries DB API v1 - DB APIv2 MI API - JSON - UUID utils - binrpc
  • 5. (c) asipto.com 2012 - Highlights 5 Over 10 IMS Extensions Websockets generic database clusteringembedded mono interpreter C#, Python, Java, .... cassandra connector http://www.kamailio.org/wiki/features/new-in-3.3.x http://www.kamailio.org/wiki/features/new-in-4.0.x IPv6 review embedded MSRP Relay time recurrence matching embedded HTTP RPC/Provisioning APIs presence/rls/xcap OMA/RCS enhancements GRUU SIP Outbound SCA
  • 6. (c) asipto.com 2013 - Highlights 6 app_java sipt tm htable cfgutils siputilssnmpstats usrloc http://www.kamailio.org/wiki/features/new-in-devel dnssec cnxcc (prepaid) stun sctp auth_ephemeral (webrtc) debugger (log pv assignment)
  • 10. among next cool things
  • 12. Routing SIP with Kamailio by Daniel-Constantin Mierla Elena-Ramona Modroiu
  • 13. 13 Book Details - http://asipto.com/u/kab  Evolution  started last year for v3.3.x  target: getting started guide and typical use cases  delayed by decision to complete Kamailio-SER integration (then Kamailio Word)  last modules merged, some renamed  significant changes in installation process  Nowadays  existing content  over 280 pages (A4) - apart of ToC  22 chapters  roadmap to full release  3-5 new chapters  check the 3.3 to 4.0 updates  examples enhanced with SIP traces  reviews (both native and non-native English speakers)  Selling  electronic format (e.g., pdf, ebook), later paper format (if such interest)  plans to make it available to purchase before full release  if all goes as expected - as soon as mid of August, 2013
  • 14. SIP Firewall For Carrier Grade Traffic blocking unwanted traffic
  • 15. 15 Everyone is evil in the world wild sipnet!
  • 18. 18 Trying to get friendlier - DoS Attacks • bandwidth • cpu • memory • MONEY
  • 19. 19 Attacks  malicious attacks  for direct attacker benefits  get access to the host and call for free  for damages on target (or fame)  consume resources on target  involuntary attacks  client side  broken clients  server side  misconfigurations (e.g., too low max expire time) ‘Undisclosed’ sources have demonstrated that the root of the issues in computer science resides in between chair and keyboard.
  • 20. 20  Problem  unexpected high volume of SIP traffic from the same IP address  Situations  someone tries to gain access to the server  misconfigured devices  Solution  keep the list of banned IP addresses in memory (hash table via htable module)  items in hash table are automatically deleted if their values are not updated for a while  if source IP of the SIP packet matches a key in hash table, then stop processing  simply drop, no SIP response (save the bandwidth)  sending a 200 OK response makes the attacker believe that it has succeeded  if not, then count the number of packets per configured time interface  if limit exceeded, stop processing and add add the source ip in the hash table  Consideration  skip trusted peers from checking (trunks, PSTN gateways, media servers,...)  do it very early in processing path, at the top of routing logic Flood Detection and Blocking IP Addresses
  • 21. 21 Flood Detection and Blocking IP Addresses if(src_ip!=__TRUSTED__) { if($sht(ipban=>$si)!=$null) { # ip is already blocked xdbg("request from blocked IP - $rm from $fu (IP:$si:$sp)n"); exit; } if (!pike_check_req()) { xlog("L_ALERT","ALERT: pike blocking $rm from $fu (IP:$si:$sp)n"); $sht(ipban=>$si) = 1; exit; } } loadmodule "htable.so" loadmodule "pike.so" # ----- pike params ----- modparam("pike", "sampling_time_unit", 2) modparam("pike", "reqs_density_per_unit", 24) modparam("pike", "remove_latency", 4) # ----- htable params ----- # ip ban htable with autoexpire after 5 minutes modparam("htable", "htable", "ipban=>size=8;autoexpire=300;") the configuration
  • 22. 22  Problem  unexpected number of failed authentication for various users  Situations  someone tries to guess passwords for legit users  misconfigured devices  Solution  keep the list of blocked usernames in memory (again via htable module)  items in hash table are automatically deleted if their values are not updated for a while  along with the username, store the timestamp of the last failed authentication and number of failed authentication in a raw  if the request has auth headers and username is found in hash table, then  if the last failed authentication is older than a predefined interval of time, give the user another chance  otherwise forbids the traffic without any authentication challenge sent back  if not found in hash table, then authenticate  if credentials mismatch, then increase the authentication failure counter and update the last authentication failure timestamp  if authentication failure attempts limit is reached, don’t challenge back  if authentication is ok, reset the counter Dictionary Attack Detection and Blocking Users
  • 23. 23 Dictionary Attack Detection and Blocking Users if(is_present_hf("Authorization") || is_present_hf("Proxy-Authorization")) { if($sht(userban=>$au::auth_count)==3) { $var(exp) = $Ts - 900; if($sht(userban=>$au::last_auth) > $var(exp)) { sl_send_reply("403", "Try later"); exit; } else { $sht(userban=>$au::auth_count) = 0; } } } modparam("htable", "htable", "ipban=>size=8;autoexpire=300;") the configuration
  • 24. 24 # authenticate requests auth_check("$fd", "subscriber", "1"); $var(rc) = $rc; if($var(rc)<0) { switch($var(rc)) { case -1: sl_send_reply("403", "Forbidden"); exit; case -2: $var(auth_count) = $shtinc(userban=>$au::auth_count); if($var(auth_count) == 3) xlog("auth failed 3rd time - src ip: $sin"); $sht(userban=>$au::last_auth) = $Ts; break; } auth_challenge("$fd", "0"); exit; } $sht(userban=>$au::auth_count) = 0; Dictionary Attack Detection and Blocking Users
  • 25. 25  Problem  an attacker could eventually get access in way or another (e.g., social engineering), then limit the damages as much as possible  Situations  lot of active calls from same user, which physically could not do that  Solution  keep a lightweight list of active calls in memory (again via htable module)  items in hash table are automatically deleted if their values are not updated for a while (cope with missing BYE cases)  items are added when the call is initiated  items are removed if no positive answer for INVITE or in case of BYE  carrier grade => lightweight dialog tracking  Call-ID is the key for hash table  the value of items in hash table is caller id (username)  when a new call comes in  count the values in the hash table that matches the caller id  if the limit is not reached, add a new item, otherwise deny the call Limiting the Number of Active Calls Per User
  • 26. 26 request_route { .... if(is_method(“BYE”)) { $sht(acalls=>$ci) = $null; } .... } reply_route { .... if(is_method(“INVITE”) && $rs>=300) { $sht(acalls=>$ci) = $null; } .... } modparam("htable", "htable", "acalls=>size=8;autoexpire=7200;") modparam(“cfgutils”, “lock_set_size”, 8)the configuration Limiting the Number of Active Calls Per User
  • 27. 27 # limit to maximum 3 active calls per user route[ACLIMIT] { if(is_method(“INVITE”) && !has_totag()) { lock(“$fU”); $var(ac) = $shtcv(acalls=>eq$fU); if($var(ac) >= 3) { unlock(“$fU”); send_reply(“403”, “Too many active calls”); exit; } $sht(acalls=>$ci) = $fU; unlock(“$fU”); } } request_route { .... route(ACLIMIT); route(RELAY); } Limiting the Number of Active Calls Per User
  • 28. 28  One of Kamailio laws  If htable module is not used, something might go wrong with your deployment (and business) at a point in time.  The target for solutions were  rely on Kamailio-only  use the lightweight solutions that scale a lot  Alternatives  real time integration with firewall for DoS protection using fail2ban  http://kb.asipto.com/kamailio:usage:k31-sip-scanning-attack  active calls tracking  dialog module: store lot of details for each call, but can detect when call is down  OPTIONS keepalives within dialog  it is not a back to back user agent (i.e, cseq numbers of dialog not updated)  in memory SQL tables via sqlops modules  easy to customize make reports and specify what details are store per dialog Remarks
  • 29. 29 Daniel-Constantin Mierla Co-Founder Kamailio http://www.asipto.com daniel@asipto.com Thank you! Questions? twitter: @miconda http://www.linkedin.com/in/miconda