123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 |
- SCTP LSM Support
- ================
- For security module support, three SCTP specific hooks have been implemented::
- security_sctp_assoc_request()
- security_sctp_bind_connect()
- security_sctp_sk_clone()
- Also the following security hook has been utilised::
- security_inet_conn_established()
- The usage of these hooks are described below with the SELinux implementation
- described in ``Documentation/security/SELinux-sctp.rst``
- security_sctp_assoc_request()
- -----------------------------
- Passes the ``@ep`` and ``@chunk->skb`` of the association INIT packet to the
- security module. Returns 0 on success, error on failure.
- ::
- @ep - pointer to sctp endpoint structure.
- @skb - pointer to skbuff of association packet.
- security_sctp_bind_connect()
- -----------------------------
- Passes one or more ipv4/ipv6 addresses to the security module for validation
- based on the ``@optname`` that will result in either a bind or connect
- service as shown in the permission check tables below.
- Returns 0 on success, error on failure.
- ::
- @sk - Pointer to sock structure.
- @optname - Name of the option to validate.
- @address - One or more ipv4 / ipv6 addresses.
- @addrlen - The total length of address(s). This is calculated on each
- ipv4 or ipv6 address using sizeof(struct sockaddr_in) or
- sizeof(struct sockaddr_in6).
- ------------------------------------------------------------------
- | BIND Type Checks |
- | @optname | @address contains |
- |----------------------------|-----------------------------------|
- | SCTP_SOCKOPT_BINDX_ADD | One or more ipv4 / ipv6 addresses |
- | SCTP_PRIMARY_ADDR | Single ipv4 or ipv6 address |
- | SCTP_SET_PEER_PRIMARY_ADDR | Single ipv4 or ipv6 address |
- ------------------------------------------------------------------
- ------------------------------------------------------------------
- | CONNECT Type Checks |
- | @optname | @address contains |
- |----------------------------|-----------------------------------|
- | SCTP_SOCKOPT_CONNECTX | One or more ipv4 / ipv6 addresses |
- | SCTP_PARAM_ADD_IP | One or more ipv4 / ipv6 addresses |
- | SCTP_SENDMSG_CONNECT | Single ipv4 or ipv6 address |
- | SCTP_PARAM_SET_PRIMARY | Single ipv4 or ipv6 address |
- ------------------------------------------------------------------
- A summary of the ``@optname`` entries is as follows::
- SCTP_SOCKOPT_BINDX_ADD - Allows additional bind addresses to be
- associated after (optionally) calling
- bind(3).
- sctp_bindx(3) adds a set of bind
- addresses on a socket.
- SCTP_SOCKOPT_CONNECTX - Allows the allocation of multiple
- addresses for reaching a peer
- (multi-homed).
- sctp_connectx(3) initiates a connection
- on an SCTP socket using multiple
- destination addresses.
- SCTP_SENDMSG_CONNECT - Initiate a connection that is generated by a
- sendmsg(2) or sctp_sendmsg(3) on a new asociation.
- SCTP_PRIMARY_ADDR - Set local primary address.
- SCTP_SET_PEER_PRIMARY_ADDR - Request peer sets address as
- association primary.
- SCTP_PARAM_ADD_IP - These are used when Dynamic Address
- SCTP_PARAM_SET_PRIMARY - Reconfiguration is enabled as explained below.
- To support Dynamic Address Reconfiguration the following parameters must be
- enabled on both endpoints (or use the appropriate **setsockopt**\(2))::
- /proc/sys/net/sctp/addip_enable
- /proc/sys/net/sctp/addip_noauth_enable
- then the following *_PARAM_*'s are sent to the peer in an
- ASCONF chunk when the corresponding ``@optname``'s are present::
- @optname ASCONF Parameter
- ---------- ------------------
- SCTP_SOCKOPT_BINDX_ADD -> SCTP_PARAM_ADD_IP
- SCTP_SET_PEER_PRIMARY_ADDR -> SCTP_PARAM_SET_PRIMARY
- security_sctp_sk_clone()
- -------------------------
- Called whenever a new socket is created by **accept**\(2)
- (i.e. a TCP style socket) or when a socket is 'peeled off' e.g userspace
- calls **sctp_peeloff**\(3).
- ::
- @ep - pointer to current sctp endpoint structure.
- @sk - pointer to current sock structure.
- @sk - pointer to new sock structure.
- security_inet_conn_established()
- ---------------------------------
- Called when a COOKIE ACK is received::
- @sk - pointer to sock structure.
- @skb - pointer to skbuff of the COOKIE ACK packet.
- Security Hooks used for Association Establishment
- =================================================
- The following diagram shows the use of ``security_sctp_bind_connect()``,
- ``security_sctp_assoc_request()``, ``security_inet_conn_established()`` when
- establishing an association.
- ::
- SCTP endpoint "A" SCTP endpoint "Z"
- ================= =================
- sctp_sf_do_prm_asoc()
- Association setup can be initiated
- by a connect(2), sctp_connectx(3),
- sendmsg(2) or sctp_sendmsg(3).
- These will result in a call to
- security_sctp_bind_connect() to
- initiate an association to
- SCTP peer endpoint "Z".
- INIT --------------------------------------------->
- sctp_sf_do_5_1B_init()
- Respond to an INIT chunk.
- SCTP peer endpoint "A" is
- asking for an association. Call
- security_sctp_assoc_request()
- to set the peer label if first
- association.
- If not first association, check
- whether allowed, IF so send:
- <----------------------------------------------- INIT ACK
- | ELSE audit event and silently
- | discard the packet.
- |
- COOKIE ECHO ------------------------------------------>
- |
- |
- |
- <------------------------------------------- COOKIE ACK
- | |
- sctp_sf_do_5_1E_ca |
- Call security_inet_conn_established() |
- to set the peer label. |
- | |
- | If SCTP_SOCKET_TCP or peeled off
- | socket security_sctp_sk_clone() is
- | called to clone the new socket.
- | |
- ESTABLISHED ESTABLISHED
- | |
- ------------------------------------------------------------------
- | Association Established |
- ------------------------------------------------------------------
|