SlideShare a Scribd company logo
1 of 50
Download to read offline
What The Fuzz!
Or Why You Should Really
Fuzz Your RTC Code
Lorenzo Miniero
@elminiero
Kamailio World
May 7th 2019,
A fuzzy intro
Lorenzo Miniero
• Ph.D @ UniNA
• Chairman @ Meetecho
• Barber shop avoider
Contacts and info
• lorenzo@meetecho.com
• https://twitter.com/elminiero
• https://www.slideshare.net/LorenzoMiniero
Just a few words on Meetecho
• Co-founded in 2009 as an academic spin-off
• University research efforts brought to the market
• Completely independent from the University
• Focus on real-time multimedia applications
• Strong perspective on standardization and open source
• Several activities
• Consulting services
• Commercial support and Janus licenses
• Streaming of live events (IETF, ACM, etc.)
• Proudly brewed in sunny Napoli(*), Italy
((*)
You may have heard of it)
Kudos to Alessandro Toppi for this content!
Hot topic in Kamailio talks already!
https://www.youtube.com/watch?v=bhy7-uxZGqk
Kamailio lovers know fuzzing already
https://www.youtube.com/watch?v=CuxKD5zljVI
Why another talk on fuzzing, then?
• Project Zero is a team of security analysts employed by Google
• https://googleprojectzero.blogspot.com/
• Recently focused on videoconferencing applications
• Focus on end-to-end, and RTP testing
• Malicious endpoint generating randomized input
• Built new tools required for the task
• Targeted many applications, and found dangerous bugs
• Apple FaceTime
• WhatsApp
• WebRTC (yikes!)
Philipp Hancke’s wakeup call (crashing Janus of all things!)
https://webrtchacks.com/lets-get-better-at-fuzzing-in-2019-heres-how/
Why another talk on fuzzing, then?
• Project Zero is a team of security analysts employed by Google
• https://googleprojectzero.blogspot.com/
• Recently focused on videoconferencing applications
• Focus on end-to-end, and RTP testing
• Malicious endpoint generating randomized input
• Built new tools required for the task
• Targeted many applications, and found dangerous bugs
• Apple FaceTime
• WhatsApp
• WebRTC (yikes!)
Philipp Hancke’s wakeup call (crashing Janus of all things!)
https://webrtchacks.com/lets-get-better-at-fuzzing-in-2019-heres-how/
Why another talk on fuzzing, then?
• Project Zero is a team of security analysts employed by Google
• https://googleprojectzero.blogspot.com/
• Recently focused on videoconferencing applications
• Focus on end-to-end, and RTP testing
• Malicious endpoint generating randomized input
• Built new tools required for the task
• Targeted many applications, and found dangerous bugs
• Apple FaceTime
• WhatsApp
• WebRTC (yikes!)
Philipp Hancke’s wakeup call (crashing Janus of all things!)
https://webrtchacks.com/lets-get-better-at-fuzzing-in-2019-heres-how/
Why another talk on fuzzing, then?
• Project Zero is a team of security analysts employed by Google
• https://googleprojectzero.blogspot.com/
• Recently focused on videoconferencing applications
• Focus on end-to-end, and RTP testing
• Malicious endpoint generating randomized input
• Built new tools required for the task
• Targeted many applications, and found dangerous bugs
• Apple FaceTime
• WhatsApp
• WebRTC (yikes!)
Philipp Hancke’s wakeup call (crashing Janus of all things!)
https://webrtchacks.com/lets-get-better-at-fuzzing-in-2019-heres-how/
Project Zero scaring the fuzz out of us
• In Kamailio, focus is on SIP/SDP signalling, of course
• Media often taken care of in other components
• WebRTC is signalling agnostic, though
• You can use SIP, or XMPP, or some JSON flavour, or [INSERT_PROTOCOL]
• A lot of media-related protocols to worry about instead!
• STUN/TURN (NAT traversal)
• DTLS/DTLS-SRTP (secure exchange of keys and data)
• RTP/RTCP (or actually, SRTP/SRTCP), including RTP extensions
• SCTP (data channels)
• ... and codec specific payloads!
• Identifying keyframes (VP8, VP9, H.264)
• VP8 simulcast (VP8 payload descriptor)
• VP9 SVC (VP9 payload descriptor)
Project Zero scaring the fuzz out of us
• In Kamailio, focus is on SIP/SDP signalling, of course
• Media often taken care of in other components
• WebRTC is signalling agnostic, though
• You can use SIP, or XMPP, or some JSON flavour, or [INSERT_PROTOCOL]
• A lot of media-related protocols to worry about instead!
• STUN/TURN (NAT traversal)
• DTLS/DTLS-SRTP (secure exchange of keys and data)
• RTP/RTCP (or actually, SRTP/SRTCP), including RTP extensions
• SCTP (data channels)
• ... and codec specific payloads!
• Identifying keyframes (VP8, VP9, H.264)
• VP8 simulcast (VP8 payload descriptor)
• VP9 SVC (VP9 payload descriptor)
Project Zero scaring the fuzz out of us
• In Kamailio, focus is on SIP/SDP signalling, of course
• Media often taken care of in other components
• WebRTC is signalling agnostic, though
• You can use SIP, or XMPP, or some JSON flavour, or [INSERT_PROTOCOL]
• A lot of media-related protocols to worry about instead!
• STUN/TURN (NAT traversal)
• DTLS/DTLS-SRTP (secure exchange of keys and data)
• RTP/RTCP (or actually, SRTP/SRTCP), including RTP extensions
• SCTP (data channels)
• ... and codec specific payloads!
• Identifying keyframes (VP8, VP9, H.264)
• VP8 simulcast (VP8 payload descriptor)
• VP9 SVC (VP9 payload descriptor)
Project Zero scaring the fuzz out of us
• In Kamailio, focus is on SIP/SDP signalling, of course
• Media often taken care of in other components
• WebRTC is signalling agnostic, though
• You can use SIP, or XMPP, or some JSON flavour, or [INSERT_PROTOCOL]
• A lot of media-related protocols to worry about instead!
• STUN/TURN (NAT traversal)
• DTLS/DTLS-SRTP (secure exchange of keys and data)
• RTP/RTCP (or actually, SRTP/SRTCP), including RTP extensions
• SCTP (data channels)
• ... and codec specific payloads!
• Identifying keyframes (VP8, VP9, H.264)
• VP8 simulcast (VP8 payload descriptor)
• VP9 SVC (VP9 payload descriptor)
Ok, we’re scared now... what is fuzz testing?
• Automated software testing technique
• Unexpected or invalid data submitted to a program
• Input pattern modified according to a defined strategy (e.g., for coverage)
• Typical workflow
1 Engine generates input
2 Pattern mutated depending on existing dataset (“Corpus”)
3 Input data passed to target function and monitored (e.g., via sanitizers)
4 Coverage of new lines updates stats and Corpus (new pattern)
5 Repeat until it crashes!
• Repeatability can be ensured using the same seeds or previous dumps
Ok, we’re scared now... what is fuzz testing?
• Automated software testing technique
• Unexpected or invalid data submitted to a program
• Input pattern modified according to a defined strategy (e.g., for coverage)
• Typical workflow
1 Engine generates input
2 Pattern mutated depending on existing dataset (“Corpus”)
3 Input data passed to target function and monitored (e.g., via sanitizers)
4 Coverage of new lines updates stats and Corpus (new pattern)
5 Repeat until it crashes!
• Repeatability can be ensured using the same seeds or previous dumps
Ok, we’re scared now... what is fuzz testing?
• Automated software testing technique
• Unexpected or invalid data submitted to a program
• Input pattern modified according to a defined strategy (e.g., for coverage)
• Typical workflow
1 Engine generates input
2 Pattern mutated depending on existing dataset (“Corpus”)
3 Input data passed to target function and monitored (e.g., via sanitizers)
4 Coverage of new lines updates stats and Corpus (new pattern)
5 Repeat until it crashes!
• Repeatability can be ensured using the same seeds or previous dumps
Enter Janus!
Janus
General purpose, open source WebRTC server
• https://github.com/meetecho/janus-gateway
• Demos and documentation: https://janus.conf.meetecho.com
• Community: https://groups.google.com/forum/#!forum/meetecho-janus
Modular architecture
• The core only implements the WebRTC stack
• JSEP/SDP, ICE, DTLS-SRTP, Data Channels, Simulcast, VP9-SVC, ...
• Plugins expose Janus API over different “transports”
• Currently HTTP / WebSockets / RabbitMQ / Unix Sockets / MQTT / Nanomsg
• “Application” logic implemented in plugins too
• Users attach to plugins via the Janus core
• The core handles the WebRTC stuff
• Plugins route/manipulate the media/data
• Plugins can be combined on client side as “bricks”
• Video SFU, Audio MCU, SIP gatewaying, broadcasting, etc.
Modular architecture
• The core only implements the WebRTC stack
• JSEP/SDP, ICE, DTLS-SRTP, Data Channels, Simulcast, VP9-SVC, ...
• Plugins expose Janus API over different “transports”
• Currently HTTP / WebSockets / RabbitMQ / Unix Sockets / MQTT / Nanomsg
• “Application” logic implemented in plugins too
• Users attach to plugins via the Janus core
• The core handles the WebRTC stuff
• Plugins route/manipulate the media/data
• Plugins can be combined on client side as “bricks”
• Video SFU, Audio MCU, SIP gatewaying, broadcasting, etc.
Modular architecture
• The core only implements the WebRTC stack
• JSEP/SDP, ICE, DTLS-SRTP, Data Channels, Simulcast, VP9-SVC, ...
• Plugins expose Janus API over different “transports”
• Currently HTTP / WebSockets / RabbitMQ / Unix Sockets / MQTT / Nanomsg
• “Application” logic implemented in plugins too
• Users attach to plugins via the Janus core
• The core handles the WebRTC stuff
• Plugins route/manipulate the media/data
• Plugins can be combined on client side as “bricks”
• Video SFU, Audio MCU, SIP gatewaying, broadcasting, etc.
Modular architecture
• The core only implements the WebRTC stack
• JSEP/SDP, ICE, DTLS-SRTP, Data Channels, Simulcast, VP9-SVC, ...
• Plugins expose Janus API over different “transports”
• Currently HTTP / WebSockets / RabbitMQ / Unix Sockets / MQTT / Nanomsg
• “Application” logic implemented in plugins too
• Users attach to plugins via the Janus core
• The core handles the WebRTC stuff
• Plugins route/manipulate the media/data
• Plugins can be combined on client side as “bricks”
• Video SFU, Audio MCU, SIP gatewaying, broadcasting, etc.
What should we fuzz, here?
• Many protocols via dependencies are fuzzed already
• ICE/STUN/TURN (libnice)
• DTLS/DTLS-SRTP (OpenSSL/LibreSSL/BoringSSL)
• SRTP/SRTCP (libsrtp)
• SCTP (usrsctplib)
• Some other dependencies MAY need fuzzing (but not in Janus?)
• Transports (HTTP, WebSockets, RabbitMQ, etc.)
• JSON support (Jansson)
• Others were done by us, so DEFINITELY need fuzzing
• RTCP parsing (e.g., compound packets)
• RTP processing (e.g., RTP extensions, codec specific payloads)
• SDP parsing and processing
What should we fuzz, here?
• Many protocols via dependencies are fuzzed already
• ICE/STUN/TURN (libnice)
• DTLS/DTLS-SRTP (OpenSSL/LibreSSL/BoringSSL)
• SRTP/SRTCP (libsrtp)
• SCTP (usrsctplib)
• Some other dependencies MAY need fuzzing (but not in Janus?)
• Transports (HTTP, WebSockets, RabbitMQ, etc.)
• JSON support (Jansson)
• Others were done by us, so DEFINITELY need fuzzing
• RTCP parsing (e.g., compound packets)
• RTP processing (e.g., RTP extensions, codec specific payloads)
• SDP parsing and processing
What should we fuzz, here?
• Many protocols via dependencies are fuzzed already
• ICE/STUN/TURN (libnice)
• DTLS/DTLS-SRTP (OpenSSL/LibreSSL/BoringSSL)
• SRTP/SRTCP (libsrtp)
• SCTP (usrsctplib)
• Some other dependencies MAY need fuzzing (but not in Janus?)
• Transports (HTTP, WebSockets, RabbitMQ, etc.)
• JSON support (Jansson)
• Others were done by us, so DEFINITELY need fuzzing
• RTCP parsing (e.g., compound packets)
• RTP processing (e.g., RTP extensions, codec specific payloads)
• SDP parsing and processing
A quick intro to libFuzzer
• Popular coverage-guided fuzzing engine, part of the LLVM project
• https://llvm.org/docs/LibFuzzer.html
• Used by several well known applications
• glibc, OpenSSL/LibreSSL/BoringSSL, SQLite, FFmpeg and many more
• Made sense for us to have a look at it too!
• A few key characteristics
• Needs sources to be compiled with Clang
• Works in-process (linked with the library/application under test)
• Feeds inputs to the target via a fuzzing entrypoint (target function)
• Execution of the target function is monitored with sanitizers tools (e.g., libasan)
A quick intro to libFuzzer
• Popular coverage-guided fuzzing engine, part of the LLVM project
• https://llvm.org/docs/LibFuzzer.html
• Used by several well known applications
• glibc, OpenSSL/LibreSSL/BoringSSL, SQLite, FFmpeg and many more
• Made sense for us to have a look at it too!
• A few key characteristics
• Needs sources to be compiled with Clang
• Works in-process (linked with the library/application under test)
• Feeds inputs to the target via a fuzzing entrypoint (target function)
• Execution of the target function is monitored with sanitizers tools (e.g., libasan)
A quick intro to libFuzzer
• Popular coverage-guided fuzzing engine, part of the LLVM project
• https://llvm.org/docs/LibFuzzer.html
• Used by several well known applications
• glibc, OpenSSL/LibreSSL/BoringSSL, SQLite, FFmpeg and many more
• Made sense for us to have a look at it too!
• A few key characteristics
• Needs sources to be compiled with Clang
• Works in-process (linked with the library/application under test)
• Feeds inputs to the target via a fuzzing entrypoint (target function)
• Execution of the target function is monitored with sanitizers tools (e.g., libasan)
Wait, “coverage-guided fuzzing”?
libFuzzer in (simplified) practice
1 Implement the method to receive and process the input data
// my_fuzzer.c
int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
ProcessData(Data, Size);
return 0;
}
2 Compile with Clang and the right flags
> clang -g -O1 -fsanitize=fuzzer,address,undefined my_fuzzer.c
3 Launch passing the Corpus folder as the argument
> ./my_fuzzer CORPUS_DIR
4 In case of crashes, pass the dumped input! (e.g., via gdb, or to test regressions)
> gdb --args ./my_fuzzer crash-file-dump
libFuzzer in (simplified) practice
1 Implement the method to receive and process the input data
// my_fuzzer.c
int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
ProcessData(Data, Size);
return 0;
}
2 Compile with Clang and the right flags
> clang -g -O1 -fsanitize=fuzzer,address,undefined my_fuzzer.c
3 Launch passing the Corpus folder as the argument
> ./my_fuzzer CORPUS_DIR
4 In case of crashes, pass the dumped input! (e.g., via gdb, or to test regressions)
> gdb --args ./my_fuzzer crash-file-dump
libFuzzer in (simplified) practice
1 Implement the method to receive and process the input data
// my_fuzzer.c
int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
ProcessData(Data, Size);
return 0;
}
2 Compile with Clang and the right flags
> clang -g -O1 -fsanitize=fuzzer,address,undefined my_fuzzer.c
3 Launch passing the Corpus folder as the argument
> ./my_fuzzer CORPUS_DIR
4 In case of crashes, pass the dumped input! (e.g., via gdb, or to test regressions)
> gdb --args ./my_fuzzer crash-file-dump
libFuzzer in (simplified) practice
1 Implement the method to receive and process the input data
// my_fuzzer.c
int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
ProcessData(Data, Size);
return 0;
}
2 Compile with Clang and the right flags
> clang -g -O1 -fsanitize=fuzzer,address,undefined my_fuzzer.c
3 Launch passing the Corpus folder as the argument
> ./my_fuzzer CORPUS_DIR
4 In case of crashes, pass the dumped input! (e.g., via gdb, or to test regressions)
> gdb --args ./my_fuzzer crash-file-dump
Integrating libFuzzer in Janus
• First step was Clang support (Janus normally built with gcc)
• Streamlined compilation flags in the process
• Got useful warnings that led to some fixes too!
• Next step was choosing what to fuzz
• Decided to start with RTCP
• Compound packets + length values + overflows = “fun”!
• Then worked on the libFuzzer workflow
1 Fuzzing target with critical RTCP-related functions
2 Helper script to build the fuzzer
3 Helper script to run the fuzzer
Original pull request (now merged, with RTP and SDP fuzzing as well)
https://github.com/meetecho/janus-gateway/pull/1492
Integrating libFuzzer in Janus
• First step was Clang support (Janus normally built with gcc)
• Streamlined compilation flags in the process
• Got useful warnings that led to some fixes too!
• Next step was choosing what to fuzz
• Decided to start with RTCP
• Compound packets + length values + overflows = “fun”!
• Then worked on the libFuzzer workflow
1 Fuzzing target with critical RTCP-related functions
2 Helper script to build the fuzzer
3 Helper script to run the fuzzer
Original pull request (now merged, with RTP and SDP fuzzing as well)
https://github.com/meetecho/janus-gateway/pull/1492
Integrating libFuzzer in Janus
• First step was Clang support (Janus normally built with gcc)
• Streamlined compilation flags in the process
• Got useful warnings that led to some fixes too!
• Next step was choosing what to fuzz
• Decided to start with RTCP
• Compound packets + length values + overflows = “fun”!
• Then worked on the libFuzzer workflow
1 Fuzzing target with critical RTCP-related functions
2 Helper script to build the fuzzer
3 Helper script to run the fuzzer
Original pull request (now merged, with RTP and SDP fuzzing as well)
https://github.com/meetecho/janus-gateway/pull/1492
Integrating libFuzzer in Janus
• First step was Clang support (Janus normally built with gcc)
• Streamlined compilation flags in the process
• Got useful warnings that led to some fixes too!
• Next step was choosing what to fuzz
• Decided to start with RTCP
• Compound packets + length values + overflows = “fun”!
• Then worked on the libFuzzer workflow
1 Fuzzing target with critical RTCP-related functions
2 Helper script to build the fuzzer
3 Helper script to run the fuzzer
Original pull request (now merged, with RTP and SDP fuzzing as well)
https://github.com/meetecho/janus-gateway/pull/1492
Integrating libFuzzer in Janus
// fuzz-rtcp.c
#include "janus/rtcp.h"
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
if (size < 8 || size > 1472)
return 0;
if (!janus_is_rtcp(data, size))
return 0;
/* Initialize an empty RTCP context */
janus_rtcp_context ctx;
janus_rtcp_parse(ctx, (char *)data, size);
GSList *list = janus_rtcp_get_nacks((char *)data, size);
...
if (list)
g_slist_free(list);
return 0;
}
Presenting the code coverage
Corpora files: a shared effort!
https://github.com/RTC-Cartel/webrtc-fuzzer-corpora (thx, Iñaki!)
Scalable distributed fuzzing via OSS-Fuzz
https://github.com/google/oss-fuzz/pull/2241 (Janus is in, yay!)
Scalable distributed fuzzing via OSS-Fuzz
https://github.com/google/oss-fuzz/pull/2241 (Janus is in, yay!)
A detailed tutorial on how to setup all this!
https://webrtchacks.com/fuzzing-janus/
What’s next?
• So far, we only fuzzed RTP, RTCP and in part SDP in the core
• SDP fuzzing should be improved (maybe with structure-aware fuzzing?)
• Fuzzing signalling might be nice, but so many transports!
• What about plugins and their custom interactions?
• Definitely expand the corpora
• The shared RTC-Cartel repo should help with that
• Let’s see if what crashed you crashed us too, and viceversa!
• libFuzzer is not the only option here
• Henning and Sandro introduced AFL, Radamsa, Gasoline and others last year
• KITE and its “weaponised” browsers can be very helpful as an orthogonal testing tool
What’s next?
• So far, we only fuzzed RTP, RTCP and in part SDP in the core
• SDP fuzzing should be improved (maybe with structure-aware fuzzing?)
• Fuzzing signalling might be nice, but so many transports!
• What about plugins and their custom interactions?
• Definitely expand the corpora
• The shared RTC-Cartel repo should help with that
• Let’s see if what crashed you crashed us too, and viceversa!
• libFuzzer is not the only option here
• Henning and Sandro introduced AFL, Radamsa, Gasoline and others last year
• KITE and its “weaponised” browsers can be very helpful as an orthogonal testing tool
What’s next?
• So far, we only fuzzed RTP, RTCP and in part SDP in the core
• SDP fuzzing should be improved (maybe with structure-aware fuzzing?)
• Fuzzing signalling might be nice, but so many transports!
• What about plugins and their custom interactions?
• Definitely expand the corpora
• The shared RTC-Cartel repo should help with that
• Let’s see if what crashed you crashed us too, and viceversa!
• libFuzzer is not the only option here
• Henning and Sandro introduced AFL, Radamsa, Gasoline and others last year
• KITE and its “weaponised” browsers can be very helpful as an orthogonal testing tool
Thanks! Questions? Comments?
Get in touch!
• https://twitter.com/elminiero
• https://twitter.com/meetecho
• http://www.meetecho.com
See you soon in Napoli!
September 23-25, 2019, Napoli — https://januscon.it
See you soon in Napoli!
September 23-25, 2019, Napoli — https://januscon.it

More Related Content

What's hot

Janus + Audio @ Open Source World
Janus + Audio @ Open Source WorldJanus + Audio @ Open Source World
Janus + Audio @ Open Source WorldLorenzo Miniero
 
WebRTC Rockstars Asian Tour 2017
WebRTC Rockstars Asian Tour 2017WebRTC Rockstars Asian Tour 2017
WebRTC Rockstars Asian Tour 2017Lorenzo Miniero
 
Janus + NDI @ ClueCon 2021
Janus + NDI @ ClueCon 2021Janus + NDI @ ClueCon 2021
Janus + NDI @ ClueCon 2021Lorenzo Miniero
 
SIP/WebRTC load testing @ KamailioWorld 2017
SIP/WebRTC load testing @ KamailioWorld 2017SIP/WebRTC load testing @ KamailioWorld 2017
SIP/WebRTC load testing @ KamailioWorld 2017Lorenzo Miniero
 
WHIP and Janus @ IIT-RTC 2021
WHIP and Janus @ IIT-RTC 2021WHIP and Janus @ IIT-RTC 2021
WHIP and Janus @ IIT-RTC 2021Lorenzo Miniero
 
Write a SocialTV app @ OpenSIPS 2021
Write a SocialTV app @ OpenSIPS 2021Write a SocialTV app @ OpenSIPS 2021
Write a SocialTV app @ OpenSIPS 2021Lorenzo Miniero
 
WebRTC, RED and Janus @ ClueCon21
WebRTC, RED and Janus @ ClueCon21WebRTC, RED and Janus @ ClueCon21
WebRTC, RED and Janus @ ClueCon21Lorenzo Miniero
 
WebRTC security+more @ KamailioWorld 2018
WebRTC security+more @ KamailioWorld 2018WebRTC security+more @ KamailioWorld 2018
WebRTC security+more @ KamailioWorld 2018Lorenzo Miniero
 
Can SFUs and MCUs be friends @ IIT-RTC 2020
Can SFUs and MCUs be friends @ IIT-RTC 2020Can SFUs and MCUs be friends @ IIT-RTC 2020
Can SFUs and MCUs be friends @ IIT-RTC 2020Lorenzo Miniero
 
Virtual IETF meetings with WebRTC @ IETF 109 MOPS
Virtual IETF meetings with WebRTC @ IETF 109 MOPSVirtual IETF meetings with WebRTC @ IETF 109 MOPS
Virtual IETF meetings with WebRTC @ IETF 109 MOPSLorenzo Miniero
 
Janus: an open source and general purpose WebRTC (gateway) server
Janus: an open source and general purpose WebRTC (gateway) serverJanus: an open source and general purpose WebRTC (gateway) server
Janus: an open source and general purpose WebRTC (gateway) serverDevDay
 
Scaling WebRTC deployments with multicast @ IETF 110 MBONED
Scaling WebRTC deployments with multicast @ IETF 110 MBONEDScaling WebRTC deployments with multicast @ IETF 110 MBONED
Scaling WebRTC deployments with multicast @ IETF 110 MBONEDLorenzo Miniero
 
Simulcast/SVC @ IIT-RTC 2019
Simulcast/SVC @ IIT-RTC 2019Simulcast/SVC @ IIT-RTC 2019
Simulcast/SVC @ IIT-RTC 2019Lorenzo Miniero
 
Scaling WebRTC applications with Janus
Scaling WebRTC applications with JanusScaling WebRTC applications with Janus
Scaling WebRTC applications with JanusLorenzo Miniero
 
FOSDEM2018 Janus Lua plugin presentation
FOSDEM2018 Janus Lua plugin presentationFOSDEM2018 Janus Lua plugin presentation
FOSDEM2018 Janus Lua plugin presentationLorenzo Miniero
 
Janus Workshop pt.2 @ ClueCon 2021
Janus Workshop pt.2 @ ClueCon 2021Janus Workshop pt.2 @ ClueCon 2021
Janus Workshop pt.2 @ ClueCon 2021Lorenzo Miniero
 
Turning live events to virtual with Janus
Turning live events to virtual with JanusTurning live events to virtual with Janus
Turning live events to virtual with JanusLorenzo Miniero
 
Janus workshop @ RTC2019 Beijing
Janus workshop @ RTC2019 BeijingJanus workshop @ RTC2019 Beijing
Janus workshop @ RTC2019 BeijingLorenzo Miniero
 

What's hot (20)

Janus @ ClueCon 2019
Janus @ ClueCon 2019Janus @ ClueCon 2019
Janus @ ClueCon 2019
 
Janus + Audio @ Open Source World
Janus + Audio @ Open Source WorldJanus + Audio @ Open Source World
Janus + Audio @ Open Source World
 
WebRTC Rockstars Asian Tour 2017
WebRTC Rockstars Asian Tour 2017WebRTC Rockstars Asian Tour 2017
WebRTC Rockstars Asian Tour 2017
 
Janus + NDI @ ClueCon 2021
Janus + NDI @ ClueCon 2021Janus + NDI @ ClueCon 2021
Janus + NDI @ ClueCon 2021
 
SIP/WebRTC load testing @ KamailioWorld 2017
SIP/WebRTC load testing @ KamailioWorld 2017SIP/WebRTC load testing @ KamailioWorld 2017
SIP/WebRTC load testing @ KamailioWorld 2017
 
WHIP and Janus @ IIT-RTC 2021
WHIP and Janus @ IIT-RTC 2021WHIP and Janus @ IIT-RTC 2021
WHIP and Janus @ IIT-RTC 2021
 
Write a SocialTV app @ OpenSIPS 2021
Write a SocialTV app @ OpenSIPS 2021Write a SocialTV app @ OpenSIPS 2021
Write a SocialTV app @ OpenSIPS 2021
 
WebRTC, RED and Janus @ ClueCon21
WebRTC, RED and Janus @ ClueCon21WebRTC, RED and Janus @ ClueCon21
WebRTC, RED and Janus @ ClueCon21
 
Janus @ RTC2017 Beijing
Janus @ RTC2017 BeijingJanus @ RTC2017 Beijing
Janus @ RTC2017 Beijing
 
WebRTC security+more @ KamailioWorld 2018
WebRTC security+more @ KamailioWorld 2018WebRTC security+more @ KamailioWorld 2018
WebRTC security+more @ KamailioWorld 2018
 
Can SFUs and MCUs be friends @ IIT-RTC 2020
Can SFUs and MCUs be friends @ IIT-RTC 2020Can SFUs and MCUs be friends @ IIT-RTC 2020
Can SFUs and MCUs be friends @ IIT-RTC 2020
 
Virtual IETF meetings with WebRTC @ IETF 109 MOPS
Virtual IETF meetings with WebRTC @ IETF 109 MOPSVirtual IETF meetings with WebRTC @ IETF 109 MOPS
Virtual IETF meetings with WebRTC @ IETF 109 MOPS
 
Janus: an open source and general purpose WebRTC (gateway) server
Janus: an open source and general purpose WebRTC (gateway) serverJanus: an open source and general purpose WebRTC (gateway) server
Janus: an open source and general purpose WebRTC (gateway) server
 
Scaling WebRTC deployments with multicast @ IETF 110 MBONED
Scaling WebRTC deployments with multicast @ IETF 110 MBONEDScaling WebRTC deployments with multicast @ IETF 110 MBONED
Scaling WebRTC deployments with multicast @ IETF 110 MBONED
 
Simulcast/SVC @ IIT-RTC 2019
Simulcast/SVC @ IIT-RTC 2019Simulcast/SVC @ IIT-RTC 2019
Simulcast/SVC @ IIT-RTC 2019
 
Scaling WebRTC applications with Janus
Scaling WebRTC applications with JanusScaling WebRTC applications with Janus
Scaling WebRTC applications with Janus
 
FOSDEM2018 Janus Lua plugin presentation
FOSDEM2018 Janus Lua plugin presentationFOSDEM2018 Janus Lua plugin presentation
FOSDEM2018 Janus Lua plugin presentation
 
Janus Workshop pt.2 @ ClueCon 2021
Janus Workshop pt.2 @ ClueCon 2021Janus Workshop pt.2 @ ClueCon 2021
Janus Workshop pt.2 @ ClueCon 2021
 
Turning live events to virtual with Janus
Turning live events to virtual with JanusTurning live events to virtual with Janus
Turning live events to virtual with Janus
 
Janus workshop @ RTC2019 Beijing
Janus workshop @ RTC2019 BeijingJanus workshop @ RTC2019 Beijing
Janus workshop @ RTC2019 Beijing
 

Similar to Fuzzing RTC @ Kamailio World 2019

WebRTC Broadcasting @ TADSummit 2023
WebRTC Broadcasting @ TADSummit 2023WebRTC Broadcasting @ TADSummit 2023
WebRTC Broadcasting @ TADSummit 2023Lorenzo Miniero
 
WebRTC standards update - November 2014
WebRTC standards update - November 2014WebRTC standards update - November 2014
WebRTC standards update - November 2014Victor Pascual Ávila
 
Upperside Webinar - WebRTC Standards Update
Upperside Webinar - WebRTC Standards UpdateUpperside Webinar - WebRTC Standards Update
Upperside Webinar - WebRTC Standards UpdateUppersideConferences
 
WebRTC Webinar & Q&A - W3C WebRTC JS API Test Platform & Updates from W3C Lis...
WebRTC Webinar & Q&A - W3C WebRTC JS API Test Platform & Updates from W3C Lis...WebRTC Webinar & Q&A - W3C WebRTC JS API Test Platform & Updates from W3C Lis...
WebRTC Webinar & Q&A - W3C WebRTC JS API Test Platform & Updates from W3C Lis...Amir Zmora
 
Upperside WebRTC conference - WebRTC intro
Upperside WebRTC conference - WebRTC introUpperside WebRTC conference - WebRTC intro
Upperside WebRTC conference - WebRTC introVictor Pascual Ávila
 
Janus RTP forwarders @ FOSDEM 2020
Janus RTP forwarders @ FOSDEM 2020Janus RTP forwarders @ FOSDEM 2020
Janus RTP forwarders @ FOSDEM 2020Lorenzo Miniero
 
What's new in web standards?
What's new in web standards?What's new in web standards?
What's new in web standards?Daniel Appelquist
 
WHIP WebRTC Broadcasting @ FOSDEM 2022
WHIP WebRTC Broadcasting @ FOSDEM 2022WHIP WebRTC Broadcasting @ FOSDEM 2022
WHIP WebRTC Broadcasting @ FOSDEM 2022Lorenzo Miniero
 
WebRTC Webinar and Q&A - IP Address Privacy and Microsoft Edge Interoperability
WebRTC Webinar and Q&A - IP Address Privacy and Microsoft Edge InteroperabilityWebRTC Webinar and Q&A - IP Address Privacy and Microsoft Edge Interoperability
WebRTC Webinar and Q&A - IP Address Privacy and Microsoft Edge InteroperabilityAmir Zmora
 
WebRTC Standards Update (October 2014)
WebRTC Standards Update (October 2014)WebRTC Standards Update (October 2014)
WebRTC Standards Update (October 2014)Victor Pascual Ávila
 
Hands-On Deep Dive with MiniFi and Apache MXNet
Hands-On Deep Dive with MiniFi and Apache MXNetHands-On Deep Dive with MiniFi and Apache MXNet
Hands-On Deep Dive with MiniFi and Apache MXNetTimothy Spann
 
Multistream in Janus @ CommCon 2019
Multistream in Janus @ CommCon 2019Multistream in Janus @ CommCon 2019
Multistream in Janus @ CommCon 2019Lorenzo Miniero
 
Securing IoT Applications
Securing IoT Applications Securing IoT Applications
Securing IoT Applications WSO2
 
Scaling server side web rtc applications the janus challenge by lorenzo miniero
Scaling server side web rtc applications the janus challenge by lorenzo minieroScaling server side web rtc applications the janus challenge by lorenzo miniero
Scaling server side web rtc applications the janus challenge by lorenzo minieroGreg Kawere
 
Srikanth_PILLI_CV_latest
Srikanth_PILLI_CV_latestSrikanth_PILLI_CV_latest
Srikanth_PILLI_CV_latestSrikanth Pilli
 
Test Execution Infrastructure for IoT Quality analysis
Test Execution Infrastructure for IoT Quality analysisTest Execution Infrastructure for IoT Quality analysis
Test Execution Infrastructure for IoT Quality analysisAxel Rennoch
 

Similar to Fuzzing RTC @ Kamailio World 2019 (20)

WebRTC Broadcasting @ TADSummit 2023
WebRTC Broadcasting @ TADSummit 2023WebRTC Broadcasting @ TADSummit 2023
WebRTC Broadcasting @ TADSummit 2023
 
WebRTC standards update - November 2014
WebRTC standards update - November 2014WebRTC standards update - November 2014
WebRTC standards update - November 2014
 
Upperside Webinar - WebRTC Standards Update
Upperside Webinar - WebRTC Standards UpdateUpperside Webinar - WebRTC Standards Update
Upperside Webinar - WebRTC Standards Update
 
Workshop oracle
Workshop oracleWorkshop oracle
Workshop oracle
 
WebRTC Webinar & Q&A - W3C WebRTC JS API Test Platform & Updates from W3C Lis...
WebRTC Webinar & Q&A - W3C WebRTC JS API Test Platform & Updates from W3C Lis...WebRTC Webinar & Q&A - W3C WebRTC JS API Test Platform & Updates from W3C Lis...
WebRTC Webinar & Q&A - W3C WebRTC JS API Test Platform & Updates from W3C Lis...
 
Upperside WebRTC conference - WebRTC intro
Upperside WebRTC conference - WebRTC introUpperside WebRTC conference - WebRTC intro
Upperside WebRTC conference - WebRTC intro
 
Janus RTP forwarders @ FOSDEM 2020
Janus RTP forwarders @ FOSDEM 2020Janus RTP forwarders @ FOSDEM 2020
Janus RTP forwarders @ FOSDEM 2020
 
What's new in web standards?
What's new in web standards?What's new in web standards?
What's new in web standards?
 
WebRTC Summit November 2013 - WebRTC Interoperability (and why it is important)
WebRTC Summit November 2013 - WebRTC Interoperability (and why it is important)WebRTC Summit November 2013 - WebRTC Interoperability (and why it is important)
WebRTC Summit November 2013 - WebRTC Interoperability (and why it is important)
 
WHIP WebRTC Broadcasting @ FOSDEM 2022
WHIP WebRTC Broadcasting @ FOSDEM 2022WHIP WebRTC Broadcasting @ FOSDEM 2022
WHIP WebRTC Broadcasting @ FOSDEM 2022
 
Janus @ DevDay Napoli
Janus @ DevDay NapoliJanus @ DevDay Napoli
Janus @ DevDay Napoli
 
WebRTC Webinar and Q&A - IP Address Privacy and Microsoft Edge Interoperability
WebRTC Webinar and Q&A - IP Address Privacy and Microsoft Edge InteroperabilityWebRTC Webinar and Q&A - IP Address Privacy and Microsoft Edge Interoperability
WebRTC Webinar and Q&A - IP Address Privacy and Microsoft Edge Interoperability
 
WebRTC Standards Update (October 2014)
WebRTC Standards Update (October 2014)WebRTC Standards Update (October 2014)
WebRTC Standards Update (October 2014)
 
Hands-On Deep Dive with MiniFi and Apache MXNet
Hands-On Deep Dive with MiniFi and Apache MXNetHands-On Deep Dive with MiniFi and Apache MXNet
Hands-On Deep Dive with MiniFi and Apache MXNet
 
Multistream in Janus @ CommCon 2019
Multistream in Janus @ CommCon 2019Multistream in Janus @ CommCon 2019
Multistream in Janus @ CommCon 2019
 
Securing IoT Applications
Securing IoT Applications Securing IoT Applications
Securing IoT Applications
 
Scaling server side web rtc applications the janus challenge by lorenzo miniero
Scaling server side web rtc applications the janus challenge by lorenzo minieroScaling server side web rtc applications the janus challenge by lorenzo miniero
Scaling server side web rtc applications the janus challenge by lorenzo miniero
 
Srikanth_PILLI_CV_latest
Srikanth_PILLI_CV_latestSrikanth_PILLI_CV_latest
Srikanth_PILLI_CV_latest
 
Test Execution Infrastructure for IoT Quality analysis
Test Execution Infrastructure for IoT Quality analysisTest Execution Infrastructure for IoT Quality analysis
Test Execution Infrastructure for IoT Quality analysis
 
voip_en
voip_envoip_en
voip_en
 

More from Lorenzo Miniero

SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Getting AV1/SVC to work in the Janus WebRTC Server
Getting AV1/SVC to work in the Janus WebRTC ServerGetting AV1/SVC to work in the Janus WebRTC Server
Getting AV1/SVC to work in the Janus WebRTC ServerLorenzo Miniero
 
The challenges of hybrid meetings @ CommCon 2023
The challenges of hybrid meetings @ CommCon 2023The challenges of hybrid meetings @ CommCon 2023
The challenges of hybrid meetings @ CommCon 2023Lorenzo Miniero
 
Real-Time Text and WebRTC @ Kamailio World 2023
Real-Time Text and WebRTC @ Kamailio World 2023Real-Time Text and WebRTC @ Kamailio World 2023
Real-Time Text and WebRTC @ Kamailio World 2023Lorenzo Miniero
 
Become a rockstar using FOSS!
Become a rockstar using FOSS!Become a rockstar using FOSS!
Become a rockstar using FOSS!Lorenzo Miniero
 
Janus SFU cascading @ IIT-RTC 2022
Janus SFU cascading @ IIT-RTC 2022Janus SFU cascading @ IIT-RTC 2022
Janus SFU cascading @ IIT-RTC 2022Lorenzo Miniero
 
SIP transfer with Janus/WebRTC @ OpenSIPS 2022
SIP transfer with Janus/WebRTC @ OpenSIPS 2022SIP transfer with Janus/WebRTC @ OpenSIPS 2022
SIP transfer with Janus/WebRTC @ OpenSIPS 2022Lorenzo Miniero
 
JamRTC @ Wonder WebRTC unConference
JamRTC @ Wonder WebRTC unConferenceJamRTC @ Wonder WebRTC unConference
JamRTC @ Wonder WebRTC unConferenceLorenzo Miniero
 
Can WebRTC help musicians? @ FOSDEM 2021
Can WebRTC help musicians? @ FOSDEM 2021Can WebRTC help musicians? @ FOSDEM 2021
Can WebRTC help musicians? @ FOSDEM 2021Lorenzo Miniero
 
Welcome to JanusCon! -- Past, Present and Future of Janus
Welcome to JanusCon! -- Past, Present and Future of JanusWelcome to JanusCon! -- Past, Present and Future of Janus
Welcome to JanusCon! -- Past, Present and Future of JanusLorenzo Miniero
 

More from Lorenzo Miniero (11)

SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Getting AV1/SVC to work in the Janus WebRTC Server
Getting AV1/SVC to work in the Janus WebRTC ServerGetting AV1/SVC to work in the Janus WebRTC Server
Getting AV1/SVC to work in the Janus WebRTC Server
 
BWE in Janus
BWE in JanusBWE in Janus
BWE in Janus
 
The challenges of hybrid meetings @ CommCon 2023
The challenges of hybrid meetings @ CommCon 2023The challenges of hybrid meetings @ CommCon 2023
The challenges of hybrid meetings @ CommCon 2023
 
Real-Time Text and WebRTC @ Kamailio World 2023
Real-Time Text and WebRTC @ Kamailio World 2023Real-Time Text and WebRTC @ Kamailio World 2023
Real-Time Text and WebRTC @ Kamailio World 2023
 
Become a rockstar using FOSS!
Become a rockstar using FOSS!Become a rockstar using FOSS!
Become a rockstar using FOSS!
 
Janus SFU cascading @ IIT-RTC 2022
Janus SFU cascading @ IIT-RTC 2022Janus SFU cascading @ IIT-RTC 2022
Janus SFU cascading @ IIT-RTC 2022
 
SIP transfer with Janus/WebRTC @ OpenSIPS 2022
SIP transfer with Janus/WebRTC @ OpenSIPS 2022SIP transfer with Janus/WebRTC @ OpenSIPS 2022
SIP transfer with Janus/WebRTC @ OpenSIPS 2022
 
JamRTC @ Wonder WebRTC unConference
JamRTC @ Wonder WebRTC unConferenceJamRTC @ Wonder WebRTC unConference
JamRTC @ Wonder WebRTC unConference
 
Can WebRTC help musicians? @ FOSDEM 2021
Can WebRTC help musicians? @ FOSDEM 2021Can WebRTC help musicians? @ FOSDEM 2021
Can WebRTC help musicians? @ FOSDEM 2021
 
Welcome to JanusCon! -- Past, Present and Future of Janus
Welcome to JanusCon! -- Past, Present and Future of JanusWelcome to JanusCon! -- Past, Present and Future of Janus
Welcome to JanusCon! -- Past, Present and Future of Janus
 

Recently uploaded

MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MIND CTI
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdflior mazor
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsNanddeep Nachan
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxRustici Software
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024The Digital Insurer
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodJuan lago vázquez
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CVKhem
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesrafiqahmad00786416
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...DianaGray10
 
A Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source MilvusA Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source MilvusZilliz
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAndrey Devyatkin
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native ApplicationsWSO2
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 

Recently uploaded (20)

MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
A Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source MilvusA Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source Milvus
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 

Fuzzing RTC @ Kamailio World 2019

  • 1. What The Fuzz! Or Why You Should Really Fuzz Your RTC Code Lorenzo Miniero @elminiero Kamailio World May 7th 2019,
  • 2. A fuzzy intro Lorenzo Miniero • Ph.D @ UniNA • Chairman @ Meetecho • Barber shop avoider Contacts and info • lorenzo@meetecho.com • https://twitter.com/elminiero • https://www.slideshare.net/LorenzoMiniero
  • 3. Just a few words on Meetecho • Co-founded in 2009 as an academic spin-off • University research efforts brought to the market • Completely independent from the University • Focus on real-time multimedia applications • Strong perspective on standardization and open source • Several activities • Consulting services • Commercial support and Janus licenses • Streaming of live events (IETF, ACM, etc.) • Proudly brewed in sunny Napoli(*), Italy
  • 4. ((*) You may have heard of it)
  • 5. Kudos to Alessandro Toppi for this content!
  • 6. Hot topic in Kamailio talks already! https://www.youtube.com/watch?v=bhy7-uxZGqk
  • 7. Kamailio lovers know fuzzing already https://www.youtube.com/watch?v=CuxKD5zljVI
  • 8. Why another talk on fuzzing, then? • Project Zero is a team of security analysts employed by Google • https://googleprojectzero.blogspot.com/ • Recently focused on videoconferencing applications • Focus on end-to-end, and RTP testing • Malicious endpoint generating randomized input • Built new tools required for the task • Targeted many applications, and found dangerous bugs • Apple FaceTime • WhatsApp • WebRTC (yikes!) Philipp Hancke’s wakeup call (crashing Janus of all things!) https://webrtchacks.com/lets-get-better-at-fuzzing-in-2019-heres-how/
  • 9. Why another talk on fuzzing, then? • Project Zero is a team of security analysts employed by Google • https://googleprojectzero.blogspot.com/ • Recently focused on videoconferencing applications • Focus on end-to-end, and RTP testing • Malicious endpoint generating randomized input • Built new tools required for the task • Targeted many applications, and found dangerous bugs • Apple FaceTime • WhatsApp • WebRTC (yikes!) Philipp Hancke’s wakeup call (crashing Janus of all things!) https://webrtchacks.com/lets-get-better-at-fuzzing-in-2019-heres-how/
  • 10. Why another talk on fuzzing, then? • Project Zero is a team of security analysts employed by Google • https://googleprojectzero.blogspot.com/ • Recently focused on videoconferencing applications • Focus on end-to-end, and RTP testing • Malicious endpoint generating randomized input • Built new tools required for the task • Targeted many applications, and found dangerous bugs • Apple FaceTime • WhatsApp • WebRTC (yikes!) Philipp Hancke’s wakeup call (crashing Janus of all things!) https://webrtchacks.com/lets-get-better-at-fuzzing-in-2019-heres-how/
  • 11. Why another talk on fuzzing, then? • Project Zero is a team of security analysts employed by Google • https://googleprojectzero.blogspot.com/ • Recently focused on videoconferencing applications • Focus on end-to-end, and RTP testing • Malicious endpoint generating randomized input • Built new tools required for the task • Targeted many applications, and found dangerous bugs • Apple FaceTime • WhatsApp • WebRTC (yikes!) Philipp Hancke’s wakeup call (crashing Janus of all things!) https://webrtchacks.com/lets-get-better-at-fuzzing-in-2019-heres-how/
  • 12. Project Zero scaring the fuzz out of us • In Kamailio, focus is on SIP/SDP signalling, of course • Media often taken care of in other components • WebRTC is signalling agnostic, though • You can use SIP, or XMPP, or some JSON flavour, or [INSERT_PROTOCOL] • A lot of media-related protocols to worry about instead! • STUN/TURN (NAT traversal) • DTLS/DTLS-SRTP (secure exchange of keys and data) • RTP/RTCP (or actually, SRTP/SRTCP), including RTP extensions • SCTP (data channels) • ... and codec specific payloads! • Identifying keyframes (VP8, VP9, H.264) • VP8 simulcast (VP8 payload descriptor) • VP9 SVC (VP9 payload descriptor)
  • 13. Project Zero scaring the fuzz out of us • In Kamailio, focus is on SIP/SDP signalling, of course • Media often taken care of in other components • WebRTC is signalling agnostic, though • You can use SIP, or XMPP, or some JSON flavour, or [INSERT_PROTOCOL] • A lot of media-related protocols to worry about instead! • STUN/TURN (NAT traversal) • DTLS/DTLS-SRTP (secure exchange of keys and data) • RTP/RTCP (or actually, SRTP/SRTCP), including RTP extensions • SCTP (data channels) • ... and codec specific payloads! • Identifying keyframes (VP8, VP9, H.264) • VP8 simulcast (VP8 payload descriptor) • VP9 SVC (VP9 payload descriptor)
  • 14. Project Zero scaring the fuzz out of us • In Kamailio, focus is on SIP/SDP signalling, of course • Media often taken care of in other components • WebRTC is signalling agnostic, though • You can use SIP, or XMPP, or some JSON flavour, or [INSERT_PROTOCOL] • A lot of media-related protocols to worry about instead! • STUN/TURN (NAT traversal) • DTLS/DTLS-SRTP (secure exchange of keys and data) • RTP/RTCP (or actually, SRTP/SRTCP), including RTP extensions • SCTP (data channels) • ... and codec specific payloads! • Identifying keyframes (VP8, VP9, H.264) • VP8 simulcast (VP8 payload descriptor) • VP9 SVC (VP9 payload descriptor)
  • 15. Project Zero scaring the fuzz out of us • In Kamailio, focus is on SIP/SDP signalling, of course • Media often taken care of in other components • WebRTC is signalling agnostic, though • You can use SIP, or XMPP, or some JSON flavour, or [INSERT_PROTOCOL] • A lot of media-related protocols to worry about instead! • STUN/TURN (NAT traversal) • DTLS/DTLS-SRTP (secure exchange of keys and data) • RTP/RTCP (or actually, SRTP/SRTCP), including RTP extensions • SCTP (data channels) • ... and codec specific payloads! • Identifying keyframes (VP8, VP9, H.264) • VP8 simulcast (VP8 payload descriptor) • VP9 SVC (VP9 payload descriptor)
  • 16. Ok, we’re scared now... what is fuzz testing? • Automated software testing technique • Unexpected or invalid data submitted to a program • Input pattern modified according to a defined strategy (e.g., for coverage) • Typical workflow 1 Engine generates input 2 Pattern mutated depending on existing dataset (“Corpus”) 3 Input data passed to target function and monitored (e.g., via sanitizers) 4 Coverage of new lines updates stats and Corpus (new pattern) 5 Repeat until it crashes! • Repeatability can be ensured using the same seeds or previous dumps
  • 17. Ok, we’re scared now... what is fuzz testing? • Automated software testing technique • Unexpected or invalid data submitted to a program • Input pattern modified according to a defined strategy (e.g., for coverage) • Typical workflow 1 Engine generates input 2 Pattern mutated depending on existing dataset (“Corpus”) 3 Input data passed to target function and monitored (e.g., via sanitizers) 4 Coverage of new lines updates stats and Corpus (new pattern) 5 Repeat until it crashes! • Repeatability can be ensured using the same seeds or previous dumps
  • 18. Ok, we’re scared now... what is fuzz testing? • Automated software testing technique • Unexpected or invalid data submitted to a program • Input pattern modified according to a defined strategy (e.g., for coverage) • Typical workflow 1 Engine generates input 2 Pattern mutated depending on existing dataset (“Corpus”) 3 Input data passed to target function and monitored (e.g., via sanitizers) 4 Coverage of new lines updates stats and Corpus (new pattern) 5 Repeat until it crashes! • Repeatability can be ensured using the same seeds or previous dumps
  • 19. Enter Janus! Janus General purpose, open source WebRTC server • https://github.com/meetecho/janus-gateway • Demos and documentation: https://janus.conf.meetecho.com • Community: https://groups.google.com/forum/#!forum/meetecho-janus
  • 20. Modular architecture • The core only implements the WebRTC stack • JSEP/SDP, ICE, DTLS-SRTP, Data Channels, Simulcast, VP9-SVC, ... • Plugins expose Janus API over different “transports” • Currently HTTP / WebSockets / RabbitMQ / Unix Sockets / MQTT / Nanomsg • “Application” logic implemented in plugins too • Users attach to plugins via the Janus core • The core handles the WebRTC stuff • Plugins route/manipulate the media/data • Plugins can be combined on client side as “bricks” • Video SFU, Audio MCU, SIP gatewaying, broadcasting, etc.
  • 21. Modular architecture • The core only implements the WebRTC stack • JSEP/SDP, ICE, DTLS-SRTP, Data Channels, Simulcast, VP9-SVC, ... • Plugins expose Janus API over different “transports” • Currently HTTP / WebSockets / RabbitMQ / Unix Sockets / MQTT / Nanomsg • “Application” logic implemented in plugins too • Users attach to plugins via the Janus core • The core handles the WebRTC stuff • Plugins route/manipulate the media/data • Plugins can be combined on client side as “bricks” • Video SFU, Audio MCU, SIP gatewaying, broadcasting, etc.
  • 22. Modular architecture • The core only implements the WebRTC stack • JSEP/SDP, ICE, DTLS-SRTP, Data Channels, Simulcast, VP9-SVC, ... • Plugins expose Janus API over different “transports” • Currently HTTP / WebSockets / RabbitMQ / Unix Sockets / MQTT / Nanomsg • “Application” logic implemented in plugins too • Users attach to plugins via the Janus core • The core handles the WebRTC stuff • Plugins route/manipulate the media/data • Plugins can be combined on client side as “bricks” • Video SFU, Audio MCU, SIP gatewaying, broadcasting, etc.
  • 23. Modular architecture • The core only implements the WebRTC stack • JSEP/SDP, ICE, DTLS-SRTP, Data Channels, Simulcast, VP9-SVC, ... • Plugins expose Janus API over different “transports” • Currently HTTP / WebSockets / RabbitMQ / Unix Sockets / MQTT / Nanomsg • “Application” logic implemented in plugins too • Users attach to plugins via the Janus core • The core handles the WebRTC stuff • Plugins route/manipulate the media/data • Plugins can be combined on client side as “bricks” • Video SFU, Audio MCU, SIP gatewaying, broadcasting, etc.
  • 24. What should we fuzz, here? • Many protocols via dependencies are fuzzed already • ICE/STUN/TURN (libnice) • DTLS/DTLS-SRTP (OpenSSL/LibreSSL/BoringSSL) • SRTP/SRTCP (libsrtp) • SCTP (usrsctplib) • Some other dependencies MAY need fuzzing (but not in Janus?) • Transports (HTTP, WebSockets, RabbitMQ, etc.) • JSON support (Jansson) • Others were done by us, so DEFINITELY need fuzzing • RTCP parsing (e.g., compound packets) • RTP processing (e.g., RTP extensions, codec specific payloads) • SDP parsing and processing
  • 25. What should we fuzz, here? • Many protocols via dependencies are fuzzed already • ICE/STUN/TURN (libnice) • DTLS/DTLS-SRTP (OpenSSL/LibreSSL/BoringSSL) • SRTP/SRTCP (libsrtp) • SCTP (usrsctplib) • Some other dependencies MAY need fuzzing (but not in Janus?) • Transports (HTTP, WebSockets, RabbitMQ, etc.) • JSON support (Jansson) • Others were done by us, so DEFINITELY need fuzzing • RTCP parsing (e.g., compound packets) • RTP processing (e.g., RTP extensions, codec specific payloads) • SDP parsing and processing
  • 26. What should we fuzz, here? • Many protocols via dependencies are fuzzed already • ICE/STUN/TURN (libnice) • DTLS/DTLS-SRTP (OpenSSL/LibreSSL/BoringSSL) • SRTP/SRTCP (libsrtp) • SCTP (usrsctplib) • Some other dependencies MAY need fuzzing (but not in Janus?) • Transports (HTTP, WebSockets, RabbitMQ, etc.) • JSON support (Jansson) • Others were done by us, so DEFINITELY need fuzzing • RTCP parsing (e.g., compound packets) • RTP processing (e.g., RTP extensions, codec specific payloads) • SDP parsing and processing
  • 27. A quick intro to libFuzzer • Popular coverage-guided fuzzing engine, part of the LLVM project • https://llvm.org/docs/LibFuzzer.html • Used by several well known applications • glibc, OpenSSL/LibreSSL/BoringSSL, SQLite, FFmpeg and many more • Made sense for us to have a look at it too! • A few key characteristics • Needs sources to be compiled with Clang • Works in-process (linked with the library/application under test) • Feeds inputs to the target via a fuzzing entrypoint (target function) • Execution of the target function is monitored with sanitizers tools (e.g., libasan)
  • 28. A quick intro to libFuzzer • Popular coverage-guided fuzzing engine, part of the LLVM project • https://llvm.org/docs/LibFuzzer.html • Used by several well known applications • glibc, OpenSSL/LibreSSL/BoringSSL, SQLite, FFmpeg and many more • Made sense for us to have a look at it too! • A few key characteristics • Needs sources to be compiled with Clang • Works in-process (linked with the library/application under test) • Feeds inputs to the target via a fuzzing entrypoint (target function) • Execution of the target function is monitored with sanitizers tools (e.g., libasan)
  • 29. A quick intro to libFuzzer • Popular coverage-guided fuzzing engine, part of the LLVM project • https://llvm.org/docs/LibFuzzer.html • Used by several well known applications • glibc, OpenSSL/LibreSSL/BoringSSL, SQLite, FFmpeg and many more • Made sense for us to have a look at it too! • A few key characteristics • Needs sources to be compiled with Clang • Works in-process (linked with the library/application under test) • Feeds inputs to the target via a fuzzing entrypoint (target function) • Execution of the target function is monitored with sanitizers tools (e.g., libasan)
  • 31. libFuzzer in (simplified) practice 1 Implement the method to receive and process the input data // my_fuzzer.c int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { ProcessData(Data, Size); return 0; } 2 Compile with Clang and the right flags > clang -g -O1 -fsanitize=fuzzer,address,undefined my_fuzzer.c 3 Launch passing the Corpus folder as the argument > ./my_fuzzer CORPUS_DIR 4 In case of crashes, pass the dumped input! (e.g., via gdb, or to test regressions) > gdb --args ./my_fuzzer crash-file-dump
  • 32. libFuzzer in (simplified) practice 1 Implement the method to receive and process the input data // my_fuzzer.c int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { ProcessData(Data, Size); return 0; } 2 Compile with Clang and the right flags > clang -g -O1 -fsanitize=fuzzer,address,undefined my_fuzzer.c 3 Launch passing the Corpus folder as the argument > ./my_fuzzer CORPUS_DIR 4 In case of crashes, pass the dumped input! (e.g., via gdb, or to test regressions) > gdb --args ./my_fuzzer crash-file-dump
  • 33. libFuzzer in (simplified) practice 1 Implement the method to receive and process the input data // my_fuzzer.c int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { ProcessData(Data, Size); return 0; } 2 Compile with Clang and the right flags > clang -g -O1 -fsanitize=fuzzer,address,undefined my_fuzzer.c 3 Launch passing the Corpus folder as the argument > ./my_fuzzer CORPUS_DIR 4 In case of crashes, pass the dumped input! (e.g., via gdb, or to test regressions) > gdb --args ./my_fuzzer crash-file-dump
  • 34. libFuzzer in (simplified) practice 1 Implement the method to receive and process the input data // my_fuzzer.c int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { ProcessData(Data, Size); return 0; } 2 Compile with Clang and the right flags > clang -g -O1 -fsanitize=fuzzer,address,undefined my_fuzzer.c 3 Launch passing the Corpus folder as the argument > ./my_fuzzer CORPUS_DIR 4 In case of crashes, pass the dumped input! (e.g., via gdb, or to test regressions) > gdb --args ./my_fuzzer crash-file-dump
  • 35. Integrating libFuzzer in Janus • First step was Clang support (Janus normally built with gcc) • Streamlined compilation flags in the process • Got useful warnings that led to some fixes too! • Next step was choosing what to fuzz • Decided to start with RTCP • Compound packets + length values + overflows = “fun”! • Then worked on the libFuzzer workflow 1 Fuzzing target with critical RTCP-related functions 2 Helper script to build the fuzzer 3 Helper script to run the fuzzer Original pull request (now merged, with RTP and SDP fuzzing as well) https://github.com/meetecho/janus-gateway/pull/1492
  • 36. Integrating libFuzzer in Janus • First step was Clang support (Janus normally built with gcc) • Streamlined compilation flags in the process • Got useful warnings that led to some fixes too! • Next step was choosing what to fuzz • Decided to start with RTCP • Compound packets + length values + overflows = “fun”! • Then worked on the libFuzzer workflow 1 Fuzzing target with critical RTCP-related functions 2 Helper script to build the fuzzer 3 Helper script to run the fuzzer Original pull request (now merged, with RTP and SDP fuzzing as well) https://github.com/meetecho/janus-gateway/pull/1492
  • 37. Integrating libFuzzer in Janus • First step was Clang support (Janus normally built with gcc) • Streamlined compilation flags in the process • Got useful warnings that led to some fixes too! • Next step was choosing what to fuzz • Decided to start with RTCP • Compound packets + length values + overflows = “fun”! • Then worked on the libFuzzer workflow 1 Fuzzing target with critical RTCP-related functions 2 Helper script to build the fuzzer 3 Helper script to run the fuzzer Original pull request (now merged, with RTP and SDP fuzzing as well) https://github.com/meetecho/janus-gateway/pull/1492
  • 38. Integrating libFuzzer in Janus • First step was Clang support (Janus normally built with gcc) • Streamlined compilation flags in the process • Got useful warnings that led to some fixes too! • Next step was choosing what to fuzz • Decided to start with RTCP • Compound packets + length values + overflows = “fun”! • Then worked on the libFuzzer workflow 1 Fuzzing target with critical RTCP-related functions 2 Helper script to build the fuzzer 3 Helper script to run the fuzzer Original pull request (now merged, with RTP and SDP fuzzing as well) https://github.com/meetecho/janus-gateway/pull/1492
  • 39. Integrating libFuzzer in Janus // fuzz-rtcp.c #include "janus/rtcp.h" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { if (size < 8 || size > 1472) return 0; if (!janus_is_rtcp(data, size)) return 0; /* Initialize an empty RTCP context */ janus_rtcp_context ctx; janus_rtcp_parse(ctx, (char *)data, size); GSList *list = janus_rtcp_get_nacks((char *)data, size); ... if (list) g_slist_free(list); return 0; }
  • 41. Corpora files: a shared effort! https://github.com/RTC-Cartel/webrtc-fuzzer-corpora (thx, Iñaki!)
  • 42. Scalable distributed fuzzing via OSS-Fuzz https://github.com/google/oss-fuzz/pull/2241 (Janus is in, yay!)
  • 43. Scalable distributed fuzzing via OSS-Fuzz https://github.com/google/oss-fuzz/pull/2241 (Janus is in, yay!)
  • 44. A detailed tutorial on how to setup all this! https://webrtchacks.com/fuzzing-janus/
  • 45. What’s next? • So far, we only fuzzed RTP, RTCP and in part SDP in the core • SDP fuzzing should be improved (maybe with structure-aware fuzzing?) • Fuzzing signalling might be nice, but so many transports! • What about plugins and their custom interactions? • Definitely expand the corpora • The shared RTC-Cartel repo should help with that • Let’s see if what crashed you crashed us too, and viceversa! • libFuzzer is not the only option here • Henning and Sandro introduced AFL, Radamsa, Gasoline and others last year • KITE and its “weaponised” browsers can be very helpful as an orthogonal testing tool
  • 46. What’s next? • So far, we only fuzzed RTP, RTCP and in part SDP in the core • SDP fuzzing should be improved (maybe with structure-aware fuzzing?) • Fuzzing signalling might be nice, but so many transports! • What about plugins and their custom interactions? • Definitely expand the corpora • The shared RTC-Cartel repo should help with that • Let’s see if what crashed you crashed us too, and viceversa! • libFuzzer is not the only option here • Henning and Sandro introduced AFL, Radamsa, Gasoline and others last year • KITE and its “weaponised” browsers can be very helpful as an orthogonal testing tool
  • 47. What’s next? • So far, we only fuzzed RTP, RTCP and in part SDP in the core • SDP fuzzing should be improved (maybe with structure-aware fuzzing?) • Fuzzing signalling might be nice, but so many transports! • What about plugins and their custom interactions? • Definitely expand the corpora • The shared RTC-Cartel repo should help with that • Let’s see if what crashed you crashed us too, and viceversa! • libFuzzer is not the only option here • Henning and Sandro introduced AFL, Radamsa, Gasoline and others last year • KITE and its “weaponised” browsers can be very helpful as an orthogonal testing tool
  • 48. Thanks! Questions? Comments? Get in touch! • https://twitter.com/elminiero • https://twitter.com/meetecho • http://www.meetecho.com
  • 49. See you soon in Napoli! September 23-25, 2019, Napoli — https://januscon.it
  • 50. See you soon in Napoli! September 23-25, 2019, Napoli — https://januscon.it