Web Services Security Μέρος Ι Χρ. Ηλιούδης
To πρόβλημα Με την χρήση των Web Services γίνεται μεταφορά πληροφορίας σε μορφή εγγράφων XML και αυτή η πληροφορία κυκλοφορεί μέσω του internet για να φθάσει από την πηγή στον προορισμό της. Για αυτό το λόγο θα πρέπει να ληφθούν μέτρα ασφάλειας για την προστασία τόσο της πληροφορίας όσο και της υπηρεσίας
Επιθέσεις και Απειλές Ασφάλειας Μη εξουσιοδοτημένη χρήση Παθητική και ενεργός παρακολούθηση Αποποίηση Άρνηση παροχής υπηρεσίας Επανεκπομπή ολόκληρων μηνυμάτων ή τμήματος Man in the middle attack principal spoofing forged claims
Υπηρεσίες ασφαλείας (1) Yπηρεσία αναγνώρισης και αυθεντικοποίησης ομότιμης οντότητας Υπηρεσία αυθεντικοποίησης προέλευσης δεδομένων Υπηρεσία ακεραιότητας δεδομένων Υπηρεσία εμπιστευτικότητας δεδομένων
Υπηρεσίες ασφαλείας (2) Υπηρεσία ελέγχου μοναδικότητας μηνύματος Υπηρεσία ελέγχου προσπέλασης Υπηρεσία μη αποποίησης
Συμμετρική κρυπτογραφία
Δημοσίου κλειδιού
Διαδικασία ψηφιακής υπογραφής
Το μοντέλο ασφάλειας των Web Services (1) WS- SecureConversation WS-Federation WS-Authorization WS-Policy WS-Trust WS-Privacy WS-Security XML Encryption, XML Signature, SAML, XACML, XrML, XKMS
XML Signatures Παρέχει τις υπηρεσίες: ακεραιότητας δεδομένων, μη αποποίησης αυθεντικοποίησης.
Αλγόριθμοι παραγωγής και επιβεβαίωσης XML υπογραφών DSAwithSHA1 HMAC-SHA1 RSAwithSHA1
Η σύνταξη του στοιχείου Signature <Signature> <SignedInfo> <CanonicalizationMethod/> <SignatureMethod/> (<Reference URI? > (<Transforms>)? <DigestMethod> <DigestValue> </Reference>)+ </SignedInfo> <SignatureValue> (<KeyInfo>)? (Object ID? >)* </Signature>
Βασικά (elements) στοιχεία του XML signature Signature element, πρόκειται για το root element το οποίο περιλαμβάνει τα υπόλοιπα. SignedInfo element, περιλαμβάνει πληροφορίες σχετικές με το τι πρόκειται να υπογραφεί SignatureValue element, περιέχει την πληροφορία της ψηφιακής υπογραφής. KeyInfo element, περιέχει πληροφορίες σχετικές με το δημόσιο κλειδί που θα χρειαστεί για να γίνει validate στην ψηφιακή υπογραφή <Signature xmlns="http://www.w3.org/2000/09/xmldsig#"> <SignedInfo> <Reference URI="http://www.foo.com/secureDocument.html" /> </SignedInfo> <SignatureValue>...</SignatureValue> <KeyInfo>... </KeyInfo> </Signature>
βασικοί τύποι ψηφιακής υπογραφής : Enveloping <Signature xmlns="http://www.w3.org/2000/09/xmldsig#"> <SignedInfo> <Reference URI="#111" /> </SignedInfo> <SignatureValue>...</SignatureValue> <KeyInfo>...</KeyInfo> <Object> <SignedItem id="111">stuff to be signed</signeditem> </Object> </Signature> Περιλαμβάνει το (item) στοιχείο το οποίο πρόκειται να υπογραφεί Πρόκειται για αναφορά (reference) σε ένα στοιχείο XML element μέσα στο Signature element.
βασικοί τύποι ψηφιακής υπογραφής : Enveloped <PurchaseOrder id="po1"> <SKU>125356</SKU> <Quantity>17</Quantity> <Signature xmlns="http://www.w3.org/2000/09/xmldsig#"> <SignedInfo> <Reference URI="#po1" /> </SignedInfo> <SignatureValue>...</SignatureValue> <KeyInfo>...</KeyInfo> </Signature> </PurchaseOrder> Η αναφορά δείχνει σε ένα parent XML element όπως φαίνεται στο διάγραμμα
Detached. <PurchaseOrderDocument> <PurchaseOrder id="po1"> <SKU>12366</SKU> <Quantity>17</SKU> </PurchaseOrder> <Signature xmlns="http://www.w3.org/2000/09/xmldsig#"> <SignedInfo> <Reference URI="#po1" /> </SignedInfo> <SignatureValue>...</SignatureValue> <KeyInfo>...</KeyInfo> </Signature> Αυτή η μορφή η υπογραφή (detached signature) δείχνει σε ένα XML element ή binary file έξω από την δομή της Signature. Δηλαδή το στοιχείο που δείχνεται δεν είναι ούτε child (Enveloping Signature) ούτε γονιός (parent)(enveloped Signature). Δηλαδή μπορεί να δείχνει σε ένα element του ίδιου εγγράφου ή εκτός του εγγράφου.
XML Encryption Προσφέρει την υπηρεσία της εμπιστευτικότητας. end to end και όχι point to point προστασία
XML Encryption Κρυπτογραφημένα δεδομένα με την χρήση XML elements Τμήματα ενός XML εγγράφου μπορεί να είναι κρυπτογραφημένα κατά περίπτωση Οι πληροφορίες που μπορούν να κρυπτογραφηθούν με τη χρήση του XML encryption γενικά είναι Δεδομένα όπως HTML, JPEG, XML. Κρυπτογραφημένο κλειδί όπως για παράδειγμα symmetric key. Πληροφορία σχετική με συμφωνία του κλειδιού κρυπογράφησης (π.χ. Diffie-Hellman) Αναφορά (Reference) σε κρυπτογραφημένα δεδομένα εντός και εκτός του εγγράφου. Η μέθοδος κρυπτογράφησης (π.χ. RSA για την κρυπτογράφηση του symmetric key, AES για τα δεδομένα).
Αλγόριθμοι κρυπτογραφίας AES 128-bit key AES 192-bit RSA v2 AES 256-bit Triple-DES RSA v1.5
Η σύνταξη του στοιχείου EncryptedData <EncryptedData Id? Type? MimeType?Encoding?> <EncryptionMethod/>? <ds:keyinfo> <EncryptedKey>? <AgreementMethod>? <ds:keyname>? <ds:retrievalmethod>? <ds:*>? </ds:keyinfo>? <CipherData> <CipherValue>? <CipherReference URI?>? </CipherData> <EncryptionProperties>? </EncryptedData>
XML Encryption: παράδειγμα <Employee> <EmployeeID>512-34-4567</EmployeeID> <Manager>Fred Jones</Manager> <Salary>$50,000</Salary> </Employee> Το κρυπτογραφημένο μήνυμα θα έχει την παρακάτω μορφή με το XML encryption : <Employee> <EmployeeID><EncryptedData> A.Ije@OJFdl</EncryptedData></EmployeeID> <Manager>Fred Jones</Manager> <EncryptedData>J1!%dW2s23#D'?D2@</EncryptedData> </Employee>
XML Encryption: παράδειγμα SOAP:Envelope> <SOAP:Header> <!--Firewall info --> <EncryptedData>binary data</encrypteddata> </SOAP:Header> <SOAP:Body> <EncryptedData>binary data</encrypteddata> </SOAP:Body></SOAP:Envelope>
βασικά στοιχεία (elements) του XML encryption: EncryptedData EncryptedData : Είναι το κύριο element στο XML encryption. Περιλαμβάνει τα δεδομένα σε κρυπτογραφημένη μορφή ή πρόκειται για αναφορά σε πληροφορία που είναι κρυπτογραφημένη. Στην περίπτωση που πρόκειται για αναφορά σε εξωτερικό URI τότε μπορεί να αναφέρεται είτε σε XML έγγραφο είτε σε άλλη μορφή δεδομένων. Επίσης μπορούμε μαζί με τα κρυπτογραφημένα δεδομένα να συμπεριλάβουμε και το public key μέσα σε ένα KeyInfo element. Σε ένα έγγραφο μπορούμε να έχουμε περισσότερα από ένα EncryptedData elements. Τα κύρια elements που περιέχονται είναι το EncryptionMethod και το CipherData. Το EncryptionMethod περιλαμβάνει τον αλγόριθμο που χρησιμοποιήθηκε για την κρυπτογράφηση. To CipherData είτε περιλαμβάνει τα κρυπτογραφημένα δεδομένα (CipherValue) είτε περιλαμβάνει αναφορά στην κρυπτογραφημένη πληροφορία (CipherReferecne URI).
<EncryptedData Id? Type? MimeType? Encoding?> <EncryptionMethod/>? <ds:keyinfo> <EncryptedKey>? <AgreementMethod>? <ds:keyname>? <ds:retrievalmethod>? <ds:*>? </ds:keyinfo>? <CipherData> <CipherValue>? <CipherReference URI?>? </CipherData> <EncryptionProperties>? </EncryptedData>
Διαδικασία κρυπτογράφησης (XML Encryption) : 1. Επιλογή αλγορίθμου κρυπτογράφησης με την χρήση του EncryptionMethod element (3DES, AES) 2. Απόκτηση του encryption key. Δημιουργία ή και ανάκτηση υπάρχοντος κλειδιού. Χρήση του KeyInfo element στο έγγραφο χωρίς να συμπεριλαμβάνουμε τίποτα (χρήση κοινού κλειδιού γνωστού και στους δύο εκ των προτέρων), με χρήση μοναδικού ονόματος και agreement protocol, ή κρυπτογράφηση του κλειδιού με χρήση δημοσίου κλειδιού. 3. Serialize Message Data (UTF-8 Encoding). Οι αλγόριθμοι κρυπτογράφησης περιμένουν octets (stream of bytes) και έτσι τα XML δεδομένα πρέπει να μετατραπούν σε octets για να κρυπτογραφηθούν. Αυτό το βήμα εφρμόζεται μόνο στο XML plaintext το οποίο πρέπει να μετατραπεί σε UTF-8 πριν την κρυπτογράφηση. (UTF : Unicode Transformation Format, το οποίο μετατρέπει το Unicode characters(plaintext) σε octets (sequence of bytes). 4. Κρυπτογράφηση των δεδομένων. Αφού έχουμε επιλέξει τον αλγόριθμο, το encryption key και τα δεδομένα (raw data) μπορούμε να κάνουμε την κρυπτογράφηση. 5. Καθορισμός του τύπου δεδομένων. Χρήση του EncryptedDataType το οποίο καθορίζει element ή περιεχόμενο κρυπτογράφησης. Αυτό το element (το οποίο είναι προαιρετικό αλλά πιθανόν χρειάζεται πάντα) σε συνδυασμό με το MimeType και το Encoding πρέπει να καθοριστούν.δημιουργία του αντίστοιχου EncryptedData element. Είναι το τελικό βήμα που συμπεριλαμβάνει όλα τα αποτελέσματα των προηγούμενων βημάτων.
Διαδικασία αποκρυπτογράφησης : Διαδικτυακές Υπηρεσίες Προστιθέμενης 1. Ανάκτηση του αλγορίθμου, των παραμέτρων και του KeyInfo τα οποία αναμένονται να βρεθούν στα elements EncryptedData και EncryptionMethod. Στην περίπτωση που είναι γνωστά εκ των προτέρων τα πεδία είναι κενά. 2. Ανάκτηση του κλειδιού από το KeyInfo element. Το κλειδί μπορεί να περιέχεται κρυπτογραφημένο ή με αναφορά στο EncryptedKey οπότε θα πρέπει να ανακτηθεί και να αποκρυπτογραφηθεί. 3. Αποκρυπτογράφηση των δεδομένων που περιλαμβάνονται στο CipherData και μπορεί να είναι ενσωματωμένα στο CipherValue ή να υπάρχει αναφορά στο CipherReference (URI) οπότε πρέπει να ανακτηθεί. 4. Επεξεργασία των XML elements και του περιεχομένου τους. Το κείμενο πρέπει να είναι base64 decoded για την ανάκτηση του encryped octet sequence το οποίο περιμένει ο αλγόριθμος κρυπτογράφησης. Μετά την αποκρυπτογράφηση είναι διαθέσιμα τα δεδομένα σε μορφή UTF-8 (encoded bytes). Στην περίπτωση που έχει καθοριστεί το EncryptedDataType η αποκρυπτογραφημένη πληροφορία τοποθετείται στο XML έγγραφο αντικαθιστώντας τη δομή EncryptedData. Αν δεν έχει καθοριστεί τότε προχωράμε στο επόμενο βήμα. 5. Επεξεργασία δεδομένων των οποίων ο τύπος δεν έχει καθοριστεί (non XML element ή non XML element content). Στην περίπτωση που δεν έχει καθοριστεί το EncryptedDataType attribute το αποτέλεσμα της αποκρυπτογράφησης στέλνεται στην εφαρμογή. Τα EncryptedData, MimeType και Encoding είναι προαιρετική πληροφορία για να βοηθήσει την εφαρμογή για να διαχειριστεί τα δεδομένα που θα παραλάβει. Διαδικασία Αποκρυπτογράφησης (XML decryption) :
SAML (Security Assertion Markup Language) Το πρότυπο SAML (Security Assertion Markup Language) είναι πρότυπο βασισμένο σε XML και δημιουργήθηκε για να δώσει την δυνατότητα οικουμενικών οντοτήτων (portable identities) και ισχυρισμών που θέλουν να υποστηρίξουν. Πρόκειται για προδιαγραφή που αναπτύχθηκε από τον οργανισμό OASIS
SAML (Security Assertion Markup Language) Το SAML είναι ένα standard XML format κατάλληλο για την μεταφορά Το πρότυπο περιλαμβάνει ένα πρωτόκολλο ανταλλαγής μηνυμάτων (standard message exchange protocol) και καθορίζει τον τρόπο με τον οποίο ζητάμε την πληροφορία που χρειάζεται. Καθορίζει τους κανόνες για τον τρόπο μεταφοράς επιτυγχάνοντας διαλειτουργικότητα (interoperability) Εκφράζει την ασφάλεια με την μορφή ισχυρισμών (assertions) σχετικά με τα αντικείμενα. Αυτό είναι ιδιαίτερα σημαντικό στα web services όπου τα ασφαλή δεδομένα μεταφέρονται μέσω αρκετών συστημάτων για την υλοποίηση μιας συναλλαγής.
SAML είναι ουσιαστικά τρείς μηχανισμοί βασισμένοι σε XML Assertions. XML schema και ορισμός για τους ισχυρισμούς ασφάλειας, το οποίο έχει την δυνατότητα επέκτασης με νέους ισχυρισμούς. Protocol. XML schema και ορισμός ενός request/response πρωτοκόλλου. Οι αιτήσεις γίνονται για αποφάσεις πολιτικής ασφάλειας και εφαρμογής ασφάλειας (enforcement) από τις SAML authorities. Bindings. Κανόνες για την χρήση των ισχυρισμών και περιγράφονται με bindings και πρωτόκολλα.
SAML Η SAML ορίζει μεταξύ άλλων: την σύνταξη και την δομή των assertions (SAML assertions), τους κανόνες που πρέπει να ακολουθούνται για την επεξεργασία των assertions, ένα σύνολο request-response πρωτοκόλλων για την ανταλλαγή των assertions.
SAML assertions authentication assertion attribute assertion authorization assertion
ισχυρισμός εμπιστοσύνης Authentication. Σημαίνει ότι ένα authentication authority έχει κάνει authentication το υποκείμενο του ισχυρισμού, χρησιμοποιώντας συγκεκριμένη διαδικασία σε συγκεκριμένο χρόνο και για συγκεκριμένο χρονικό διάστημα εγκυρότητας (ισχύος). Authorization. Σημαίνει ότι η συγκεκριμένη οντότητα (authority) έχει δώσει δικαιώματα ή αρνήθηκε δικαιώματα για το υποκείμενο (subject) του ισχυρισμού για να ενεργήσει σε συγκεκριμένο πόρο μέσα σε συγκεκριμένο χρονικό διάστημα. Μία τέτοια οντότητα είναι εξουσιοδοτημένη να διαβάσει, να προωθήσει, να διαγράψει ή να κάνει άλλες ενέργειες. Attributes. Παρέχουν τις πληροφορίες δικαιωμάτων για ένα ισχυρισμό authentication ή authorization.
Παράδειγμα ισχυρισμού (assertion) για authentication : <saml:assertion> MajorVersion="1" MinorVersion="0" AssertionID="192.168.0.1.12345" Issuer="Company.com" IssueInstant="2004-01-21T10:02:00Z"> <saml:conditions> NotBefore="2004-01-21T10:02:00Z" NotAfter="2004-01-21T10:09:00Z" /> <saml:authenticationstatement> AuthenticationMethod="password" AuthenticationInstant="2004-01-21T10:02:00Z"> <saml:subject> <saml:nameidentifier SecurityDomain="Company.com" Name="jothy" /> </saml:subject> </saml:authenticationstatement> </saml:assertion>
SAML Domain Model
Παράδειγμα πλήρους SOAP request που στέλνεται μέσω HTTP <samlp:authenticationquery>: POST /SamlService HTTP/1.1 Host: www.example.com Content-Type: text/xml Content-Length: nnn SOAPAction: http://www.oasis-open.org/committees/security <SOAP-ENV:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/"> <SOAP-ENV:Body> <samlp:request xmlns:samlp:="..." xmlns:saml="..." xmlns:ds="..."> <ds:signature>... </ds:signature> <samlp:authenticationquery>... </samlp:authenticationquery> </samlp:request> </SOAP-ENV:Body> </SOAP-ENV:Envelope> To binding που καθορίζει το SAML, αν και δεν αποκλείει την χρήση άλλων, απαιτεί SOAP over HTTP. Η πληροφορία του SAML περιέχεται στο SOAP
Παράδειγμα απάντησης SOAP response στην προηγούμενη αίτηση με τον ισχυρισμό <samlp:authenticationstatement> : HTTP/1.1 200 OK Content-Type: text/xml Content-Length: nnnn <SOAP-ENV:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/"> <SOAP-ENV:Body> <samlp:response xmlns:samlp="..." xmlns:saml="..." xmlns:ds="..."> <Status> <StatusCodevalue="samlp:Success"/> </Status> <ds:signature>... </ds:signature> <saml:assertion> <saml:authenticationstatement> </SOAP-Env:Body>... </saml:authenticationstatement> </saml:assertion> </samlp:response> </SOAP-ENV:Envelope>
WS-Policy Η WS-Policy παρέχει την γραμματική με την οποία μπορούμε να εκφράσουμε: ικανότητες, απαιτήσεις, προτιμήσεις γενικά χαρακτηριστικά κάποιας οντότητας που υφίσταται εντός ενός XML Web services-based συστήματος. Οι απαιτήσεις, οι ικανότητες, οι προτιμήσεις και τα υπόλοιπα χαρακτηριστικά εκφράζονται μέσω των policies (πολιτικές).
WS-SecurityPolicy Η WS-SecurityPolicy ορίζει security assertions με τα οποία μία οντότητα μπορεί να γνωστοποιήσει απαιτήσεις ασφαλείας σε επίπεδο SOAP μηνυμάτων.
WS-SecurityPolicy security assertions SecurityToken assertion Integrity assertion Confidentiality assertion Visibility assertion Security header assertion MessageAge assertion
WS-Trust Η WS-Trust ορίζει τον μηχανισμό με τον οποίο εκδηλώνονται οι παραπάνω λειτουργίες: εκδηλώνεται ένα αίτημα για απόκτηση ενός πιστοποιητικού εκδίδονται τα πιστοποιητικά ενημερώνονται, ακυρώνονται και ανταλλάσονται τα πιστοποιητικά ελέγχεται η εγκυρότητά τους (λειτουργίες τεκμηρίωσης - validation).
Το WS-Trust μοντέλο
Παράδειγμα χρήσης WS-Trust
XKMS 2.0 Ανάγκη ύπαρξης μίας υποδομής που θα υποστηρίζει λειτουργίες που σχετίζονται με την τεχνολογία του δημόσιου κλειδιού. Η XKMS λειτουργεί ως ένα Web service που προσφέρει μία διεπαφή προς μία PKI
X-KISS και X-KRSS Το XKMS πρωτόκολλο ορίζει έναν μηχανισμό request/response και αποτελείται από δύο επιμέρους πρωτόκολλα: το XML Key Information Service Specification (X-KISS) το XML Key Registration Service Specification (X-KRSS).
XACML Η XACML παρέχει το XML λεξιλόγιο με το οποίο μπορεί να εκφραστεί μία πολιτική ελέγχου πρόσβασης.
XACML (extensible Access Control Markup Language), αποτελεί πρότυπο του οργανισμού OASIS και καθορίζει ένα λεξικό για την έκφραση κανόνων βάσει των οποίων λαμβάνονται αποφάσεις access control. Η τελευταία έκδοση είναι το XACML 2.0.
κανόνας στην XACML: A target, an effect, a set of conditions. target : ορίζει τον χώρο της αίτησης απόφασης η οποία αναφέρεται σε ενέργειες σε πόρους όπως για παράδειγμα αίτηση ανάγνωσης για συγκεκριμένο έγγραφο effect : ορίζει την απόφαση όπως για παράδειγμα permit/deny. conditions : δίνουν δυναμική συμπεριφορά στον κανόνα ανάλογα με την περίπτωση
Παράδειγμα κανόνας ο οποίος δίνει δικαιώματα ανάγνωσης σε ιατρικά δεδομένα ασθενούς του οργανισμού example.com μόνο αν αυτός που ζητά πρόσβαση είναι ο ίδιος ο ασθενής (the SAML subject) <?xml version="1.0" encoding="utf-8"?> <Rule RuleId="//medico.com/rules/rule1" Effect="Permit" xmlns="urn:oasis:names:tc:xacml:0.15i:policy" xmlns:function="urn:oasis:names:tc:xacml:0.15i:function" xmlns:identifier="urn:oasis:names:tc:xacml:0.15i:identifier" xmlns:saml="urn:oasis:names:tc:saml:1.0:assertion" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="urn:oasis:names:tc:xacml:0.15i:policy http://www.oasis-open.org/tc/xacml/v15/ draft-xacml-schema-policy-15i.xsd"> <Description>A person may read any record for which he or she is the designated patient</description>
Η αίτηση SOAP λαμβάνεται από το σημείο PEP (Policy Enforcement Point) και η απόφαση για allow/deny γίνεται σε συνδυασμό αρκετών οντοτήτων XACML. To authorization decision query στέλνει λεπτομέρειες για τον πόρο που ζητείται πρόσβαση (δηλαδή το Web Service) στο PDP (Policy Decision Point) μαζί με λεπτομέρειες για την ταυτότητα του αιτούντος Η πολιτική ανακτάται από το PDP από το PRP (Policy Retrieval Point). Αυτό φαίνεται στα βήματα 3 και 5 Τα βήματα 6 και 7 δείχνουν ότι ένα PIP (Policy Information Point) χρησιμοποιείται για το Predicate of a rule, δηλαδή όπως έχει οριστεί στην XACML σημαίνει την δυνατότητα για την αναζήτηση ενός attribute Τέλος αφού το PDP έχει όλες τις πληροφορίες που χρειάζεται για να πάρει την απόφαση, εξετάζει τον κανόνα και αν το αποτέλεσμα είναι να επιτραπεί η πρόσβαση τότε επιστρέφει ένα SALM authorization ισχυρισμό απόφασης στο PEP. Αυτό μπορεί να εισαχθεί στο SOAP message και στην συνέχεια να προωθηθεί στο target Web Service (βήμα 9).
access requester 2. access request PEP 13. obligations obligations service 3. request 12. response PDP 4. request notification 5. attribute queries 10. attributes 11. response context context handler 9. resource content resource 6. attribute query 8. attribute 1. policy PIP 7c. resource attributes 7b. environment attributes 7a. subject attributes PAP subjects environment