Oracle Database Communication Protocol
Roman Bazhin ZeroNights E.0x04 @nezlooy
a pentester’s view, or rude Oracle experiments
Communication Protocol a pentesters view, or rude Oracle experiments - - PowerPoint PPT Presentation
Oracle Database Communication Protocol a pentesters view, or rude Oracle experiments Roman Bazhin ZeroNights E.0x04 @nezlooy Who am I Security researcher at Digital Security r.bazhin@dsec.ru @nezlooy Agenda Motivation Oracle
Roman Bazhin ZeroNights E.0x04 @nezlooy
a pentester’s view, or rude Oracle experiments
Security researcher at Digital Security r.bazhin@dsec.ru @nezlooy
Всё началось с задачи
RAC Node 1 RAC Node 2 Oracle Client
RAC Node 1 RAC Node 2 Oracle Client Over 50 requests per module
Oracle Client N Proxy / Fuzzer
Client Fuzz server
SYN ACK SYN-ACK
Client Fuzz server
SYN ACK REQUEST SYN-ACK RESPONSE
Client Fuzz server
SYN ACK REQUEST REQUEST SYN-ACK RESPONSE RESPONSE
Client Fuzz server
SYN ACK REQUEST REQUEST SYN-ACK RESPONSE RESPONSE
Опа-опа… На на*!
Client Fuzz server
SYN ACK REQUEST REQUEST SYN-ACK RESPONSE RESPONSE
Striped hat / Ethical gop-stopping
Oracle Client MITM Proxy
Только давай без палева!
Oracle Client N Proxy / Fuzzer
Эу… Чё там с протоколом?
И чё есть в этих ваших интернетах?
http://www.thesprawl.org/research/oracle-tns-protocol/ Basic information about headers, type of packets / For beginners / Outdated.
http://anonsvn.wireshark.org/wireshark/trunk/epan/dissectors/packet-tns.c Only headers, type of packets / Already have one.
http://oracle-internals.com/ Basic information about headers, TTC, server internals / Good.
http://www.pythian.com/blog/repost-oracle-protocol/ Description of some types of messages, marshalling / Very good but outdated :(
И чё есть в этих ваших интернетах?
http://soonerorlater.hu/index.khtml?article_id=515 Oracle 9i, 10g and 11g MITM-attack tool.
http://seclists.org/fulldisclosure/2012/Apr/204 Oracle 9i, 10g and 11g TNS Listener Poison exploitation tool.
https://code.google.com/p/amoeba/ Amoeba is a Distributing database proxy / no longer supported.
Ну норм, чё :/
pytnspoison
Ваще норм, чё :/
pytnsproxy
Тож норм :/
Amoeba
Как проблему порешаем?
OCI 10g, 11g, 12c JDBC .NET
OCI 10g, 11g, 12c JDBC .NET Thin Thin
Чё там в авторских доках?
Application OCI/JDBC/.NET Two-Task Common (TTC) Oracle Net Foundation Layer Oracle Protocol Support Oracle Net Client
Application OCI/JDBC/.NET Two-Task Common (TTC) Oracle Net Foundation Layer Oracle Protocol Support Oracle Net TCP TCPS NP SDP TNS Network Session (NS) Network Transport (NT) Network Naming (NN)
Application (OCI/JDBC/.NET) Two-Task Common (TTC) Oracle Net Transport layer Network layer Data link layer Physical layer
Server OPI Two-Task Common (TTC) Oracle Net Foundation Layer Oracle Protocol Support Oracle Net RDBMS
Айда поподробнее!
Transparent Network Substrate (TNS)
0000 00 00 00 9F 06 00 00 00 00 00 DE AD BE EF 00 95 0010 0A 20 00 00 00 04 00 00 04 00 03 00 00 00 00 00 0020 04 00 05 0A 20 00 00 00 08 00 01 09 09 09 09 09 0030 09 09 09 00 12 00 01 DE AD BE EF 00 03 00 00 00 0040 04 00 04 00 01 00 02 00 03 00 01 00 03 00 00 00 0050 00 00 04 00 05 0A 20 00 00 00 02 00 03 E0 E1 00 0060 02 00 06 FC FF 00 02 00 02 00 00 00 00 00 04 00 0070 05 0A 20 00 00 00 0C 00 01 00 01 08 0A 06 03 02 0080 0B 0C 0F 10 11 00 03 00 02 00 00 00 00 00 04 00 0090 05 0A 20 00 00 00 06 00 01 00 01 03 04 05 06 00
Transparent Network Substrate (TNS)
0000 00 9F 00 00 06 00 00 00 00 00 DE AD BE EF 00 95 0010 0A 20 00 00 00 04 00 00 04 00 03 00 00 00 00 00 0020 04 00 05 0A 20 00 00 00 08 00 01 09 09 09 09 09 0030 09 09 09 00 12 00 01 DE AD BE EF 00 03 00 00 00 0040 04 00 04 00 01 00 02 00 03 00 01 00 03 00 00 00 0050 00 00 04 00 05 0A 20 00 00 00 02 00 03 E0 E1 00 0060 02 00 06 FC FF 00 02 00 02 00 00 00 00 00 04 00 0070 05 0A 20 00 00 00 0C 00 01 00 01 08 0A 06 03 02 0080 0B 0C 0F 10 11 00 03 00 02 00 00 00 00 00 04 00 0090 05 0A 20 00 00 00 06 00 01 00 01 03 04 05 06 00
Packet Size Packet Checksum Packet Type Header Flags Header Checksum
Transparent Network Substrate (TNS) in Oracle 12c
0000 00 00 00 9F 06 00 00 00 00 00 DE AD BE EF 00 95 0010 0A 20 00 00 00 04 00 00 04 00 03 00 00 00 00 00 0020 04 00 05 0A 20 00 00 00 08 00 01 09 09 09 09 09 0030 09 09 09 00 12 00 01 DE AD BE EF 00 03 00 00 00 0040 04 00 04 00 01 00 02 00 03 00 01 00 03 00 00 00 0050 00 00 04 00 05 0A 20 00 00 00 02 00 03 E0 E1 00 0060 02 00 06 FC FF 00 02 00 02 00 00 00 00 00 04 00 0070 05 0A 20 00 00 00 0C 00 01 00 01 08 0A 06 03 02 0080 0B 0C 0F 10 11 00 03 00 02 00 00 00 00 00 04 00 0090 05 0A 20 00 00 00 06 00 01 00 01 03 04 05 06 00
Packet Size Packet Type Header Flags Header Checksum
TNS / Packet Types:
* Observed in Oracle 12c
TNS / Packet Types:
* Observed in Oracle 12c
DATA Packet Type
0000 00 9F 00 00 06 00 00 00 00 00 DE AD BE EF 00 95 0010 0A 20 00 00 00 04 00 00 04 00 03 00 00 00 00 00 0020 04 00 05 0A 20 00 00 00 08 00 01 09 09 09 09 09 0030 09 09 09 00 12 00 01 DE AD BE EF 00 03 00 00 00 0040 04 00 04 00 01 00 02 00 03 00 01 00 03 00 00 00 0050 00 00 04 00 05 0A 20 00 00 00 02 00 03 E0 E1 00 0060 02 00 06 FC FF 00 02 00 02 00 00 00 00 00 04 00 0070 05 0A 20 00 00 00 0C 00 01 00 01 08 0A 06 03 02 0080 0B 0C 0F 10 11 00 03 00 02 00 00 00 00 00 04 00 0090 05 0A 20 00 00 00 06 00 01 00 01 03 04 05 06 00
Data flag DATA = 0x00 MORE * = 0x20 EOF = 0x40 * Observed in Oracle 12c
Additional Network Options Negotiation (ANO)
Magic constant
0000 00 9F 00 00 06 00 00 00 00 00 DE AD BE EF 00 95 0010 0A 20 00 00 00 04 00 00 04 00 03 00 00 00 00 00 0020 04 00 05 0A 20 00 00 00 08 00 01 09 09 09 09 09 0030 09 09 09 00 12 00 01 DE AD BE EF 00 03 00 00 00 0040 04 00 04 00 01 00 02 00 03 00 01 00 03 00 00 00 0050 00 00 04 00 05 0A 20 00 00 00 02 00 03 E0 E1 00 0060 02 00 06 FC FF 00 02 00 02 00 00 00 00 00 04 00 0070 05 0A 20 00 00 00 0C 00 01 00 01 08 0A 06 03 02 0080 0B 0C 0F 10 11 00 03 00 02 00 00 00 00 00 04 00 0090 05 0A 20 00 00 00 06 00 01 00 01 03 04 05 06 00
Two-Task Interface (TTI)
0000 00 00 00 A7 06 20 00 00 00 00 03 76 01 01 01 07 0010 01 01 01 01 05 01 01 4F 52 41 55 53 45 52 01 0D 0020 0D 41 55 54 48 5F 54 45 52 4D 49 4E 41 4C 01 07 0030 07 75 6E 6B 6E 6F 77 6E 00 01 0F 0F 41 55 54 48 0040 5F 50 52 4F 47 52 41 4D 5F 4E 4D 01 10 10 4A 44 0050 42 43 20 54 68 69 6E 20 43 6C 69 65 6E 74 00 01 0060 0C 0C 41 55 54 48 5F 4D 41 43 48 49 4E 45 01 0B 0070 0B 41 42 43 41 42 43 44 45 2D 70 63 00 01 08 08 0080 41 55 54 48 5F 50 49 44 01 04 04 31 32 33 34 00 0090 01 08 08 41 55 54 48 5F 53 49 44 01 08 08 72 2E
Function ID Subfunction ID Sequence number * * Used only in the client request
TTC / TTI commands:
# Return OPI Parameter
TTC / TTI commands:
# Return OPI Parameter
TTC / TTI commands:
# Return OPI Parameter
TTC / TTI commands:
# Return OPI Parameter
TTC / TTI commands:
# Return OPI Parameter
# Piggyback func follows
Client data requests
TTC / TTI subfunction:
TTC / TTI subfunction:
TTC / TTI commands:
# Return OPI Parameter
# Oracle func complete
# I/O vector
# Describe information
Server data responses
Authentication
Client Server
CONNECT ANO TTIPRO ACCEPT ANO TTIPRO TTIDTY TTIDTY TTIFUN -> OSESSKEY TTIRPA TTIFUN -> OAUTH TTIRPA TTIFUN -> OVERSION * TTIRPA
* Thin client, OCI use TTIPFN -> O80SES or not used at all
Selecting
Client Server
TTIFUN -> OALL8 TTIFUN -> OFETCH TTIDCB TTIRXH
Selecting
Client Server
TTIPFN -> OCCA TTIDCB TTIFUN -> OFETCH TTIOER
Selecting
Client Server
TTIFUN -> OALL8 TTIDCB TTIFUN -> OFETCH TTIRXH TTIFUN -> OLOBOPS TTILOBD DATA * DATA DATA
* Observed in Oracle 10g and 11g
TTIFUN -> OLOBOPS TTIRPA
Logging Off
Client Server
TTIFUN -> OLOGOFF * EOF TTISTA
* OCI, Thin client use TTIPFN -> OCCA
TTIFUN -> OROLLBACK TTISTA TTIFUN -> OCOMMIT TTISTA
length pkt_checksum type flag hdr_checksum data_flag data_flag data_id data_id sig data_id ano
version_int_1 version_str_1 service
service_sv timeout seqNumber packetVersion lowestVersion
sduSize tduSize protocolCharacteristics undefined1 HWByteOrder dataLen dataOff maxReceivedData anoFlags anoEnabled b4padding largeSDU sduSize tduSize func lag0 flag1 noAnoServices noAnoServices extended timeout tick timeout reconnectAddrLen reconnectAddrOff largeSDU sduSize tduSize session poolEnabled timestampLastIO sduSize tduSize isBreak A_MAGIC1 dataLen intVersion strVersion Supervisor
serviceSv serviceSvSub serviceSvMarker serviceSvShortVer1 serviceSvShortVer2 serviceSvIntVersion serviceSvStrVersion drivers driversType curPID junk
length pkt_checksum type flag hdr_checksum data_flag data_flag data_id data_id sig data_id ano
version_int_1 version_str_1 service
service_sv timeout seqNumber packetVersion lowestVersion
sduSize tduSize protocolCharacteristics undefined1 HWByteOrder dataLen dataOff maxReceivedData anoFlags anoEnabled b4padding largeSDU sduSize tduSize func lag0 flag1 noAnoServices noAnoServices extended timeout tick timeout reconnectAddrLen reconnectAddrOff largeSDU sduSize tduSize session poolEnabled timestampLastIO sduSize tduSize isBreak A_MAGIC1 dataLen intVersion strVersion Supervisor
serviceSv serviceSvSub serviceSvMarker serviceSvShortVer1 serviceSvShortVer2 serviceSvIntVersion serviceSvStrVersion drivers driversType curPID junk
Data Types:
Some magic
Зацени, братюня!
Utility written in Python, works as a database proxy. Support Oracle Databases 10g, 11g, 12c Features:
Эу… пацанчик, гони видео!
Necessary to implement:
Whish list:
* And ODAT (Oracle Database Attacking Tool) features supporting
https://github.com/nezlooy
Гопай аккуратнее!
Пацанчики из Оракла жгут!
10.2.0.5.0 11.2.0.4.0 12.1.0.2.0
Fuzzing with pyZZUF and Radamsa
Fuzzing with pyZZUF and Radamsa
(9) (7) (9) 10.2.0.5.0 11.2.0.4.0 12.1.0.2.0
AV_READ, AV_WRITE, AV_EXEC, HEAP_CORRUPTS
Вопросы есть? А если найду?
nezlooy
От души, братюни!