Jun 16, 2013
Novay's NFC Passport Reader
Jan 4, 2013
Step-up authentication as-a-service for SURFnet
Novay, in close collaboration with SURFnet, has made an initial design for a service to assist Identity Providers in the introduction of two-factor authentication solutions that can be used across the SURFconext federation. The report describing the design is available for download from the SURFnet website. The report describes both the technical (architecture, standards) and the procedural (registration, logging, de-registration) challenges.
- the best location for a multi-factor-authentication service, such that it can support multiple Identity Providers;
- which standards (and what choices within those standards) should be used for uniformly signaling the level of assurance from Identity Providers to Service Providers.
As for the location of the service: in a SAML based hub-and-spoke federation (such as SURFconext) it makes sense to base (the initial version of) the service as a transparent proxy on the Service Provider bound exit of the hub (as shown above). This separates the service from the hub. It also means that the Identity Providers and Service Providers can remain unchanged, except for Service Providers that need to deal with higher levels of authentication. The paper builds a case for this simple architecture.As for the standards to use: there are many variations on levels of assurance frameworks. To name just a few: NIST SP800-63 for the US and STORK for the EU. The best option, at this moment, would be to standardize on the upcoming ISO/IEC 29115 standard which will unify some of these standards. SAML 2.0 has had support for signaling details about the authentication process (and related processes) since its inception in the form of the so-called Authentication Context. This concept, however, leaves a lot of implementation freedom (and therefore interpretation freedom) for Identity Providers and Service Providers. Attempts to merge the Authentication Context concept with ISO 29115-style levels of assurance are relatively recent, and also appear in other authentication protocols such as OpenID Connect. The paper will give recommendations for how to best apply these standards.
Registration process
Feb 9, 2012
Context-enhanced Authorization
- What authorization related use-cases could benefit from context information?
- Which context-sources are relevant, mature enough, secure enough to be used today (or in the very near future)?
- How to deal with the (lack of) quality and authenticity of context?
- How does context information interact with authorization standards such as XACML and today's implementations of those standards? (See my previous posts for more technical details on the hands-on XACML work that we did in that project.)
The main lessons learned (the answers to the above questions) are:
- Typical use-cases can be found in the area of the mobile workforce ("nomadic working", etc.). As organizations introduce these new ways of working, traditional security policies that are only based on (authenticated) identity and static roles and entitlements are too strict and too coarse-grained. Context can make a difference here and allows finer-grained access so that, for example, medium level security tasks can be performed from home if the context allows this.
- A model for context-information can be constructed around different context-types, some traditional (location, time, ...), some more exotic (physiological, mental, social, ...). The above use-cases can already be adressed with the more traditional context-sources: location, time, proximity, device id, network id. These basic context-sources are readily available, and are under control of the organization.
- The easiest way to deal with authenticity and quality of context is to rely on trusted context-sources that are under control of the organization.
- Externalization of authorization, such as propagated by the Attribute Based Access Control (ABAC) paradigm (and facilitated by standards such as XACML) works well in practice when combined with context information. In a demonstrator (see video above) we showed that adding context to authorization policies managed by Tivoli Security Policy Manager (a XACML IBM product) comes down to adding a policy information point. Relying applications only need to understand XACML in order to become context-enabled.
XACML with Tivoli Security Policy Manager - Part 2
(This is part 2, for installation & configuration see part 1)
Using the TIP to specify services
TSPM needs to have a model of the resources that need protection (collections of resources are called services in the TSPM documentation). Rather than an unstructured bag of resources, a service in TSPM is specified as a tree of labeled nodes. Services can be created by hand using the web-based editor inside the TIP, or can be imported from other descriptions of applications.
An example of a supported description language for importing services is WSDL. It is relatively easy to start protecting web services in this way, just point TIP towards your WSDL file (it even supports multi-part WSDL including schemas). The resulting application model consists of the web methods of the web service (as resources). A PEP can then try to access these resources using the "invoke" action.
Using the TIP to specify policies
Policies can be created using the web-based structure editor inside the TIP. A policy can be attached nodes of a service, and the policy then holds for that node and all child-nodes of that node.
A policy built in the editor is series of rules connected using "else-if" connectives. Each rule consists of elementary propositions formed by comparing an attribute with a value of approprate type, connected using "or" and "and" connectives.
The web based nature of the structure editor forces it to be simple. Policies, perhaps created using some other editor, can also be imported as long as they are in XACML format. And, of course, polcies can be exported.
Writing a custom PEP
To test an installed and registered RTSS just use the authorization web service. Hand-craft a XACML request and send it using curl:
curl --basic -u "wasadmin:waspassword" --header "Content-type: text/xml;charset=UTF-8" --header "SOAPAction: http://xacml.ws.authz.rtss.tscc.ibm.com/rtss/AuthzService/XACML" --data "@request.xml" "http://tspm:9080/rtss/authz/services/AuthzService"
(Where a file request.xml holds the XACML request.) Note that the service uses basic authentication. The same web service is also exposed on an https port, allowing mutual TLS authentication (and possibly fallback basic authentication to authenticate the client). The request to send needs an environment section with a "ContextId" attribute, and issuer "http://security.tivoli.ibm.com/policy/distribution". The resource section of the request refers to identifiers of the nodes in the service (as specified via TIP as above).
Based on the WSDL of TSPM's authorization service you can also create a custom PEP client with JAX-WS.
An alternative to write a custom PEP in Java is to use the JACC+ API provided by IBM. This API implements (and extends) the Java Authorization Contract for Containers (JSR-115). The resulting Java code will be at a slightly higher level of abstraction, but this PEP needs an instance of RTSSClient (and thus needs to run inside WAS). You'll need the
com.ibm.sec.authz.jaccplus_7.3.jar that came with RTSSClient and the javax.j2ee.jacc.jar (or stubs thereof) to compile your war.Writing a custom PIP
A policy information point (PIP) provides values for attributes that are not part of the request sent by the PEP. TSPM has some environment attributes pre-configured (e.g. time of day, date), an external PIP allows to add other environment attributes. A custom PIP needs to implement the
IExternalFinder interface and needs to be packaged as an OSGi module (which comes down to including a 3-line plugin.xml in the jar) and needs to be registered (which comes down to adding some lines to the security-services.xmi file on the WAS and running an osgiCfgInit.sh script).Conclusion
This is not a product review! (so these are just some observations...)
- Configuring IBM Tivoli Security Policy Manager, and the stack of technologies it depends on, is, doable yet by no means trivial (for a beginner). It gets easier though, after a couple installation attempts.
- Implementing XACML support into external applications (essentially implementing a PEP interface), on the other hand, turned out to be simpler than expected.
- The same holds for implementing a PIP interface.
- The web-based editors in TIP for services and policies were ok for our purposes, yet may be a bit limited when dealing with complex services and policies
Feb 8, 2012
XACML with Tivoli Security Policy Manager - Part 1
For now, let me just get some of the (technical) XACML experiences off my chest, both to have a record of high level steps needed to deploy a real-world XACML implementation (such implementations can be pretty intimidating), and to be able to talk about the issues that we encountered with XACML in general and TSPM in particular. Caution: If you're not comfortable with the general XACML PAP, PDP, PEP, PIP terminology, this post may not be for you ;).
Installation
We used IBM's Tivoli Security Policy Manager (TSPM) in these projects. TSPM runs as an enterprise Java application inside IBM's WebSphere Application Server (WAS). It needs a database to store policies (either Derby or DB2; Derby was good enough for our purposes). And it needs a user registry for administrative user accounts (OpenLDAP works ok for our purposes).
I used the 64-bit Linux version of WAS 7.0 which installs fine on Fedora or SUSE inside VMWare and in the Amazon cloud. I used the graphical installer, which means some extra packages need to be installed on the target machine (otherwise the OS can stay pretty minimal). I updated WAS to the latest version (7.0.0.21 at the moment of writing).
TSPM itself is installed using a graphical installer as well. The installer is a 32-bit (Eclipse) application, so compatibility packages are needed to install on 64-bit Linux.
To turn TSPM into a PAP a so-called Tivoli Integrated Portal (TIP) needs to be installed. This is another enterprise Java application which runs inside a seperate WAS instance. Again a 32-bit Eclipse installer is used here. TIP exposes a web interface which allows to create services and policies.
To turn TSPM into a PDP the Runtime Security Services (RTSS) server needs to be installed. This is another enterprise Java application which, typically, runs inside the same WAS instance that TSPM was installed on. The same 32-bit Eclipse installer is used. RTSS exposes a SOAP web service that PEPs can send authorization requests to.
There's also a higher level Java API (the JACC+ API) for implementing PEPs (see below), this requires the PEP to run on a seperate WAS and an enterprise Java application called RTSSClient needs to be installed. A JACC+ PEP can also run locally (on the WAS that runs TSPM), the RTSSClient then replaces the RTSS (i.e. you don't install RTSS at all).
Configuration
Some scripts need to be run to configure TSPM and to register RTSS (and/or RTSSClient). Especially the
tspmConfigTool took some retries to get right. These scripts take configuration files (or "response" files) as input, making it easier to deploy the same configuration elsewhere... once you get it right.A local policy distribution target (PDT) needs to be registered so that policies can be distributed from the PAP to the PDP. If TSPM acts both as PAP and as a single PDP (servicing multiple PEPs, the simplest XACML use case) the whole notion of PDT seems odd (changes to the policy are distributed... to itself, but only if you tell it to do so). The notion of PDT is not part of the XACML spec (despite being a 3-letter abbreviation starting with a 'P'). In the use case where we hooked up the DataPower to TSPM the DataPower itself can also act as a PDP and needs to be registered using the
tspmRegisterPDT.sh script (the instructions are not part of the configuration guide, and you may need to use the gsk7cmd command which was not installed by default).Obviously, some things went wrong during installation and configuration. Some of these issues blocked the installation or configuration process, some issues only became clear after working with TSPM for a while. Here's a small selection:
- When installing on an instance in the Amazon cloud, the IP address of the instance can change (not the external IP, which was fixed using an elastic IP address, but the internal one). TSPM requires a fully-qualified host name at several points during installation. The solution is to set up an alias for the machine in
/etc/hostsand/or to explicitly fix the IP address in WAS's configuration. - There's a known WS-Security issue with timestamps, which requires fixing some policy settings in WAS before policies can be distributed.
- The
tspmRegisterPDT.shscript failed with some internal exception. This turned out, after a very long search, to be a corrupted log file causing the "SIB MessageBroker" not to be started. Causing some WS-Notification call to fail during registration of the PDT. - RTSS appeared to cache authorization decisions for 2 minutes (which was not appropriate for the kind of policies used in the Context-enhanced Authorization project). A related question was answered on stackoverflow.com.
- The TSPM installation, configuration, and administration guides over at the IBM information center.
- IT Security Policy Management Usage Patterns Using IBM Tivoli Security Policy Manager 2011 Redbook by Buecker et al. was useful, especially Chapter 8 (on custom PEPs and PIPs).
- The TSPM wiki on DeveloperWorks.
Jul 13, 2011
Digipass Nano
I recently had an opportunity (thanks SURFnet, and VASCO) to have some hands-on experience with a novel class of authentication tokens. In a project for SURFnet my colleague Maarten Wegdam and myself looked at so-called SIM augmented authentication tokens, and the VASCO Digipass Nano in particular. The results of our analysis, in the form of a more detailed report, is available from the SURFnet website.About the technology: A SIM augmented solution sits between the SIM and the handset (the ME) and consists of a very thin chip (see the image) in a sticker. It basically relays all traffic, consisting of so-called ISO7816-4 APDUs, from ME to SIM and back, while intercepting certain APDUs and injecting certain other APDUs. The user can interact with this benign man-in-the-middle through the SIM application toolkit (GSM 11.14, see also my earlier post on Mobile PKI), which is implemented in any GSM handset. VASCO's Digipass Nano uses this trick to implement an event based One Time Password token that is accessed by navigating the SIM menu in the handset, yet is fully secure (if GSM 11.14 is implemented securely) from snooping malware.
The man-in-the-middle characterization of SIM augmented solutions sounds scary, if you think about it, especially with respect to the trust that the ME (through GSM 11.14) puts in the SIM. On the other hand:
- The (security, usability, and business model) advantages of secure storage of credentials may outweigh the (security, usability, and business model) disadvantages of asking the user to place a hardware device between SIM and ME. (I.e., the security should not be analyzed in isolation, and there are both security advantages and disadvantages.)
- An attack which asks the user to place a (not-to-be-trusted) SIM augmented solution in their handset doesn't scale (and there is so much more low-hanging fruit for attackers, which scales much better). For a full threat analysis, see the report.
- The average user isn't too concerned about what the SIM augmented solution can do. We did a small-scale user test as part of our research.
- SIM augmentation based on GSM 11.14 allows, in principle, multiple secure elements (or secure cores, in Du Castel speak) within a single handset. Multiple secure elements, representing multiple stake holders, breaks the Mobile Network Operator dominated model for (very secure) credential storage. We also did a brief business model analysis as part of the report.
JMRTD for Android
JMRTD, the Java library that I (together with others) maintain to access and interpret ePassport content, has been ported to Android by Max Günther. To demonstrate this, Max has developed an app (see the screenshot) for Nexus S (and other NFC Android handsets). We're not the first ePassport project on Android or NFC, but we try to be the most usable one!The contactless technology in ePassports, ISO-14443, is fully compatible with NFC. Essentially this means that an NFC device in reader mode will be able to read ePassports. That is, of course, if the device has sufficient access privileges (i.e. Basic Access Control BAC, and Extended Access Control EAC). Max's app demonstrates how the essential passport holder details (aka datagroup 1) and the passport holder's facial image (aka datagroup 2) can be displayed.
The latter is actually non-trivial since that image is encoded in JPEG 2000 by some issuing countries, a format that is not supported in Android by default (thankfully there's jj2000). Another challenge that we encountered is the presence of a crippled version of Bouncy Castle in Android 2.3 which prevents inclusion of the full version (thankfully there's Spongy Castle). In general we've made many changes to JMRTD and SCUBA to make these libraries easier to port to other platforms.
We're working hard on making the app more robust and usable. Max and Claude Heyman are currently the main developers looking at Android NFC. We're trying to get MRZ OCR scanning to work (perhaps based on the Java OCR project). In its current form the app is not doing document validation or access to EAC protected data, but JMRTD allows this, in principle. We hope to publish the proof-of-concept app via the Android market soon. If you own a Nexus S (and an ePassport) we're definitely interested in your feedback.
Update: Max published the app on the market.
May 16, 2011
The Federated Provisioning Problem
(Just dumping some projects results on this blog... ) We contributed to a study for SURFnet on identity provisioning in the context of identity federations last year. My colleague Bob Hulsebosch presented about this on TNC11 (fast forward the video stream to 65'46").Provisioning is the process of providing a set of deployed applications and/or services with updates of end-user identity information. Provisioning takes place, for instance, when new users enter an organization, when new authorization rights are assigned to users, or when they leave the organization (the latter case is usually referred to as deprovisioning).
Provisioning has been recognized as an essential part of the identity management stack. Provisioning drives the other activities that are typically related to identity administration and management. An important driver for provisioning in the more traditional enterprise setting is compliance to rules and regulations. A major obstacle to wider adaptation of provisioning is the lack of widely agreed upon standards.
While provisioning is a non-trivial problem in many enterprise organizations, the problem gets worse still in the setting of identity federations as these involve cross-domain identity communication, and, more recently, dynamic services to enable complex collaboration forms such as virtual organizations. The drivers for adaption of provisioning standards in the world of identity federations may be different from those in the enterprise setting, the problem is equally of more important.
At the same time, some researchers think federation may be part of the solution and introduce so-called just-in-time-provisioning which uses federation-style information interchange standards instead of the more traditional provisioning standards as seen in the enterprise domain.
The report gives a state-of-the-art analysis of provisioning products and standards and of the, still ongoing, federated provisioning debate. It classifies different types of applications and different types of provisioning scenarios in order to come up with a framework, which is helpful when selecting a strategy for dealing with federated provisioning. The results are validated by exploring (at a suitable level of abstraction) a case study on dynamic group management.
Sep 17, 2010
SMS text authentication for patient access to Dutch electronic health record

The encryption algorithm A5/1 used in GSM has been suspect since at least 1994 (when the algorithm leaked). Nohl's talk at 26C3 (November 2009) demonstrates that a practical attack will become possible soon. And all of a sudden people start to get nervous in 2010.
As a follow-up to their report for the Dutch Ministry of Health Radboud University and PriceWaterhouseCoopers recently published a risk assessment focusing on GSM based SMS text authentication as a factor to strengthen the Dutch government citizen-to-government authentication solution DigiD.
SMS text authentication is already used in DigiD level 2, but the binding of a user's subscriber number to their DigiD is rather weak: anyone with access to the mailbox of the user's registered home address (the so-called GBA address) can bind a new mobile phone to the user's existing DigiD account (and subsequently order a password reset, completely hijacking the account). The original report by RU, PWC and TILT recommended to strengthen this binding process so that a patient would have to prove possession of a subscriber number to a government representative face-to-face. The strengthened DigiD (known as EPD-DigiD) can then be used by patients to access their electronic health record in a standard SMS OTP authentication scenario (during a session the user has an extra factor with a separate network connection to the provider).
The conclusion of the RU/PWC risk analysis is that although breaking A5/1 leaves SMS authentication relatively secure (the risk of actual abuse is not that high) the perceived lack of security in the public opinion and the non-compliance with security standards may be damaging to the reputation to the government. The solution is not secure enough to allow patients to access their health records at this point in time.
What I don't get is the proposed solution: a conversion table (on paper) sent to each user over regular snail mail (how secure is that?). The user uses this table to manually translate the code that was sent in an SMS message before entering it in the browser's form. This appears not to add an extra factor: an attacker that can eavesdrop on the Web channel and the GSM channel will soon learn the mapping. Also from a user experience perspective that sounds horrible.
An alternative approach would be to install a SIM toolkit applet on the SIM which performs the translation automatically for the user. Rather than a static table per user one can even use a key (but with a decent cipher; I'm sure the current generation of SIMs in the field support AES or at least 3DES) and have real security. Sort of a light-weight-Mobile-PKI-without-the-PKI solution.
Mar 18, 2010
NFC phones
It's 2010. The NFC revolution should have happened by now.I know this is a classical bootstrap problem: why offer services if consumers don't own NFC handsets, why produce NFC handsets if nobody offers services?
And then there are problems with the business model, there are cultural differences between banks and mobile operators, etc. There was a problem of the location of the secure element (SE): either embedded in the device (owned by the manufacturer), or on the SIM (owned by the operator). I think the mobile operators won.
Oh, and there have been countless trials and pilots.
So where are the new handsets? Below is my list of annotated bookmarks.
- Nokia has an NFC shell (2005) that can be strapped onto the Nokia 3220.
- Samsung has its SGH-X700N (2006).
- Nokia's clamshell model, the Nokia 6131-NFC (2007), and bar model, Nokia 6212 classic (2008) are pretty popular. These S40 devices have a dedicated SE embedded into the handset.
- There's a nice list of handsets over at NFC Research in Hagenberg, including models by Sagem, LG, and Motorola (2008?).
- LG seems to have had an LG KU380-NFC handset with NFC support based on an STMicroeletronics chip.
- Nokia announced the Nokia 6216 classic (2009) which was supposed to support an SE on the SIM (via SWP). But this model has been killed now.
- Mobile-ecosystem found that Samsung and LG have new NFC enabled smart phones (2010).
- Samsung developed an NFC version of its S5230 smart phone for use in trials.
- And let's hope the rumors about Apple's iPhone4G are true.
But maybe a different strategy is needed while we wait for the handset revolution: strap something onto an ordinary smart phone to NFC-enable it.
- A sticker with a dumb RFID tag. Only tag emulation, so no smart poster support. But it should be enough for the most popular use case (proximity payment without asking for user consent).
- A sticker with a smart tag which communicates with the handset over Bluetooth.
- A MicroSD card such as the one by Giesecke & Devrient and the one by First Data and Tyfone.
Feb 10, 2010
Community generated trust
I like CAcert.org. The basic premise of this CA is that trust is a community effort: the "by the people, for the people" kind of stuff. A social network for security geeks. Trust in derived identities (not identities of persons but identity of domain names or of Web servers) can then in principle be based on community generated trust so that steep yearly prices for server certificates can be avoided. We all benefit (except if you run a commercial CA, of course).I created my CAcert account ages ago, but only recently undertook some action to get my identity assured by the community. Here's how it works:
- You create an account with the service and register one or more email addresses.
- The service checks possession of each email address by sending a challenge link to click.
- You can also register domain names (where you typically host Web servers) with the service, possession of the domain is checked in a similar way.
- As a user you now have 0 points
- You can have the service issue email certificates for your email addresses (for sending encrypted or signed emails, or for client side TLS authentication).
- You can have the service issue Web server certificates for your domains (for server side TLS authentication, i.e. HTTPS).
- Issued certificates (based on a CSR that you generate) are valid for 6 months and contain only basic information (not your full name, for instance).
- You can have the service issue email certificates for your email addresses (for sending encrypted or signed emails, or for client side TLS authentication).
- Once you have over 50 points, newly issued certificates will be valid for 2 years and can contain your full name.
- Once you have over 100 points, you can also have the service issue code signing certificates and you become a so-called assurer (after you take the official online exam).
- Certificates are signed by the service's root private key and can be checked using the service's root certificate (at the time of writing that certificate is valid until 2033). Currently viewers of your TLS secured Web site will have to manually insert the root certificate into their browser's trust store. The ambition of CAcert is to have the service's root certificate included in Mozilla's trust store distributed with Firefox.
So how trustworthy is all of this, really? The foundation behind the CAcert is a non-profit organization being supported by other non-profits. They seem serious about their infrastructure's security. The server side software is open source, and although it is written in PHP and Perl, it can be inspected by security researchers. For cryptography the implementation relies on OpenSSL. There's a whole community effort to train assurers in recognizing authentic government issued IDs. That all sounds pretty trustworthy (except maybe for the use of OpenSSL, which is written by monkeys ;) ).
Let's say I want a fake identity assured (i.e., a freshly generated free-mail account with a fake name and date of birth with 100 points). How difficult is that? I'll assume that until now all other users have been honest and have been perfectly assured based on government issued IDs. I'll need to find n evil assurers (at most ten). Those evil assurers should be willing to falsely assure my fake identity. Do those n assurers need to be n different people? Maybe not: creating ten different accounts under my real name is possible (the service should be available to users which happen to have the same name and date of birth as an existing user). I could get those ten accounts assured by at most (n * (n + 1)) / 2 honest assurers so that each account gets 100 points. I then use those ten accounts to give my fake account 100 points. Better yet, I create ten fake accounts this way and give each of those 100 points so that I no longer need my ten original accounts (which are all in my real name, better delete those now).
How to remedy this? There seems to be an audit program in place, where assurers are asked to contact other assurers to sanity-check past assurances. Eventually my fraudulent accounts will be discovered and traced back to my real identity (the ten accounts in my real name that were assured by honest assurers). I could then be held to the community agreement which I agreed to when I signed up for the service. The combination of government issued ID, face-to-face meetings, community vigilance, and legal agreements actually forms a pretty good deterrent security control against the described attack. In the end what CAcert is doing is not so different from what the commercial CAs are doing.
Update 2010/02/17: Looks like this same meme was recently discussed on the CAcert mailing list.
Dec 7, 2009
SIM security and GSM security

In the old days the SIM was there to control access to the GSM network. A GSM 11.11 compliant handset would forward an authentication request from the network to the SIM by issuing RUN_GSM_ALGORITHM command. And that was it. The threat landscape was clear (unauthenticated access to the network) and security of the solution relied entirely on the security of the SIM.
The SIM application toolkit complicates things, however. A GSM 11.14 compliant handset implements a complex protocol which involves polling multiple Java Card applets and message passing from and to the network and the GUI. If the handset correctly implements this protocol then SIM applets have a trusted interface to the user during so-called proactive SIM sessions. This means, for example that an application on the handset (a MIDlet, say) cannot interfere with the GUI during such sessions. (GSM 11.14 doesn't actually say that, but other ETSI standards such as ETSI 102 206 seem to rely on this.)
Some weeks ago a worm targeting jailbroken iPhones was discovered. The iPhone (besides being a lot of other things) is a GSM handset which implements GSM 11.14 at some level. Big question is: is a jailbroken iPhone still a GSM 11.14 compliant hand set?
With smart phone operating systems becoming more open (and users demanding control over them) this is getting more interesting. Perhaps a hypervised approach is the solution. In any case, it's not as simple as it used to be.
Nov 18, 2009
Variable Road Pricing

I haven't made a detailed security analysis of this system, obviously. But couldn't one simply block the incoming GPS signal (say, using a GPS jammer). Better yet, why not relay the signal from a stationary GPS receiver at home to your on board unit?
Oct 27, 2009
RSA Conference Europe 2009
I checked out the booths of the conference's sponsors and noticed a relative large number of authentication factor vendors (G&D, Kobil, smspasscode.com) and of course the big guys (RSA Security, Microsoft, Qualys, CA).
As for the presentations, there were at least 4 different tracks, and all talks had catchy titles. Very difficult to choose from. There were a lot of "securing the cloud" talks. I've heard people claim that 'cloud==deperimeterization'. Others claim that 'cloud==virtualization', and yet others claim that 'cloud==SaaS', and even 'cloud==social networks'. Most of the talks dealt with managing the risks of enterprise cloud computing (sharing resources is risky, you'll need good SLA contracts for that). I especially liked the Collateral Hacking panel session which focused on the risk presented by totally unrelated parties you happen to share services with.
There were a few hacking-presentations. I really enjoyed Björn Brolin and Marcus Murray's Breaking the Windows driver signing model. Great live reversing demo. Bottom line: Running an anti-virus suite with badly engineered (yet Microsoft signed) kernel drivers can actually render your PC less secure from malware.
Talking about anti-virus software vendors. Both McAfee's Anthony Bettini's and Kaspersky labs' Stefan Tanase's presentation focused on threats from social networks (personalized spam, Twitter based C&C, targeted attacks based on synchronization between personal and enterprise information). Anthony had the best sound-bites IMHO: 'open-sourcing one's life', 'keep your enemies closer'. Stefan showed a glimpse of crawler based technology that Kaspersky's R&D team in Romania is working on.
More targeted social network threats came from Brian Honan who introduced the audience to some of the tools of the trade, notable pipl.com and Maltego. Interestingly, in Ireland, anyone can request everyone else's birth certificate (apparently for reasons of genealogical research), and the only thing needed to request a driver's license or passport in Ireland is a birth certificate.
Microsoft's keynote was delivered by Amy Barzdukas. She made some valid points about the perception of privacy and security by the average computer user. The FUD (initially directed at Google: Chrome's auto-completing address bar will send packets to Google, OMG, better stick with IE8) was a little too much for my taste. They're going to make it more difficult to download and install third party software through IE because of the fake virus scanner scams.
The keynote by special agent Mularski of the FBI and Andy Auld of SOCA about the Russian Business Network was so secret that I cannot blog about it. The keynote by Dave Hansen of CA on content-aware extensions of RBAC was pretty interesting and included another secret agent.
Andrew Nash of PayPal gave an insightful presentation on the consumer identity bootstrap problem. After explained the clever big bang/steady state analogy he showed just how big the problem is. What's the most important feature an Identity Provider should offer to its users? Right. Anonymity. The other PayPal presentation was by Hadi Nahari who put forward some requirements (or rather, desirements) for identity in mobile computing. It appears that PayPal is trying to get some of these ideas into the Global Platform specifications.
Ira Winkler went on a one-hour rant over the use of the term information warfare. Funny stuff, except for the one Estonian guy in the audience.
Oct 19, 2009
Two ideas I could have submitted to the SIMagine contest

Here are two ideas I could have submitted to the SIMagine contest, but didn't. ;)
- Info Cards securely stored in your SIM: Florian van Keulen, one of Maarten's students did a project on different architectures for implementing Info Card on mobile devices. One of the options that Florian investigated was to store the Info Cards on the SIM. A handset resident application would then facilitate communication between the Card Selector on a different platform (a PC in an Internet cafe) and the SIM through Bluetooth.
- Turning an existing contactless smart card into a pre-paid mobile SIM application: You're not supposed to be able to clone an ePassport or contactless creditcard, of course. But you can do something else. You can pre-record some challenge-response pairs using an NFC handset and store these in an application on the secure element (SE, usually the SIM card) of the handset. If the application can authenticate itself to an inspection system (a POS terminal) then the handset can be used instead of the original contactless card. This improves convenience: one device instead of multiple cards, you now have a GUI. As for security: You can limit the number of challenge-response pairs, you can time-stamp the challenge-response pairs (the SE can connect to some trusted time server during enrollment), etc.
Oct 1, 2009
Mobile PKI

Mobile PKI, also known as Wireless PKI (and a lot of other names such as Mobile Secure Signature Service, Secure Signature Creation Device, ...) is a technology which allows users to place electronic signatures with their cell phone. This can be used for applications that run on the phone, but also for applications that run on other platforms (the user's computer connected to the Internet, for instance). One could use this, for example, as an authentication mechanism at a relying party. In the latter scenario your phone is a "something-you-have" token which provides extra security as an attacker would have to manipulate two separate channels to mount an attack. Before placing a signature, the cell phone will ask the user for his or her PIN.
The SIM card inside the cell phone plays a central role in Mobile PKI. Actually, the obvious way to implement Mobile PKI is through a so-called SIM Application Toolkit (SAT) applet installed on the SIM card. SAT has some really cool features that make things easy, both for the mobile operator and for the user:
- They can be installed over the air (OTA) to an already deployed SIM by the mobile operator, without disturbing the user
- They can add extra (basic menu-based) features to the GUI
- They can react to events such as selection of menus by the user or incoming SMSs sent by the mobile operator
- The application resides on a tamper resistant smart card
- Most handset manufacturers will make sure that there's a trusted path from the phone's keyboard to SAT applications (the malware problem seems to still be small for the mobile platform)
- The separate channel advantage was already mentioned above
- The PIN is the same for each and every transaction
- There's no need to install software on the user's PC
- There's no need to read and type challenges or responses
- Most users will not forget or leave their cell phone unattended, and most will notice and report a missing or stolen phone
Aug 13, 2009
Anti-skimming measures
Someone glued small pieces of metal to the PIN entry pad at the POS of my local self-service gas station. It must have been one of the good guys, because it says "veiligheidsstrip" at the bottom.Certainly raises security awareness amongst customers...
(Until they get used to it and the bad guys manage to produce mini cameras that look like small pieces of metal.)
Jun 20, 2009
How to trust Country Signing Certificates
The global ICAO PKI for signing ePassports is actually a forrest of many national PKIs. And each national PKI is only 2 levels deep (depending on where you start counting):
- CSCA: Country Signing Certificate Authority
- DSCA: Document Signing Certificate Authority
- AA: Active Authentication "certificate" (which really is not part of the PKI, as this is not a certificate but a raw public key, signed implicitly in the security document of the ePassport)
- The central ICAO Public Key Directory (PKD)
- Country cross signing of CSCs
Is it possible to have a central CA instead? Some of the government Web sites where I (or rather, Google) found the CSCA certificates are protected using SSL, at least the Dutch site is (yes, I know, the certificate has expired, but I downloaded the CSCA certificate before the expiration date of the server certificate). I could have recorded the SSL transaction while downloading that CSCA certificate and I could have made that part of the CSCA certificate itself. Unfortunately, the commercial CA (in this case Verisign) which signed the server key doesn't make claims about the validity of certificate files hosted at protected servers. Sometimes the Web is just not semantic enough.
Update (July 2009): The certificate of bprbzk.nl was renewed.
Jun 19, 2009
Intermediate certificates in my local trust store
Other browser's trust stores that I checked: curl's (usually located at
/usr/share/curl/curl-ca-bundle.crt) and Java's (usually located at $JRE/lib/security/cacerts and accessed with keytool -keystore cacerts -storepass changeit -list) do not contain intermediate certificates (at least not the one I'm using below). They do contain the usual list of root certificates.My Web server's SSL certificate is signed using one of those intermediate certificates. Here's what my chain looks like:
- GTE Cybertrust Global Root is signed by GTE Cybertrust Global Root (I saved this certificate to a file called
global.crt) - Cybertrust Educational CA is signed by GTE Cybertrust Global Root (I saved this certificate to a file called
educational.crt) - My server's certificate is signed by Cybertrust Educational CA (I saved this certificate to a file called
myserver.crt)
When I first installed the certificate for my Web server (an Apache httpd 2.0 server), I merely configured my own certificate (and corresponding private key):openssl verify -CAfile global.crt -untrusted educational.crt myserver.crt
SSLCertificateFile myserver.crtThis worked fine in my Firefox, which I used to test this server.But curl refuses (unless I use the
--insecure or the --cacert option with a concatenation of the two Cybertrust certificates). Apparently the Web server needs to send the intermediate CA certificate as well (and possibly also the root CA certificate). Here's the correct setup:SSLCertificateFile myserver.crt
SSLCertificateChainFile educational.crt
SSLCACertificateFile global.crt
While having intermediate certificates in you local trust store doesn't make you less secure, if you're testing your Web server setup it's a good idea to also test it with a minimal trust store. In fact, I found that the best way to test your server's SSL settings is using openssl: openssl s_client -host myserver.com -port 443This doesn't use a trust store at all. It shows the certificate chain and gives either an error 20 (unable to get local issuer certificate, in case the server only send the server and intermediate certificates), or an error 19 (self signed certificate in chain, in case the server also sent the root certificate). (Both errors are expected, other errors indicate something may be wrong.)
Jun 17, 2009
OpenID with OpenASelect - Part 4
oa.xml (yes, it's big, I know):<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE oa-server[<!ENTITY server "ldap://ldapserver:389"><!ENTITY base "OU=Institute,DC=corporate,DC=domain,DC=com"><!ENTITY user "user@domain.com"><!ENTITY password "changeme">]><oa-server><!-- Server Configuration --><server id="openid.domain.com" friendlyname="Institute OpenID Server"><organization id="Institute OpenID" friendlyname="Institute OpenID" /></server><!-- Engine Configuration --><crypto><message_digest algorithm="SHA1" /><random_generator algorithm="SHA1PRNG" /></crypto><sessionfactory class="com.alfaariss.oa.engine.session.memory.MemorySessionFactory"><expire>900</expire><interval>60</interval><max>100</max></sessionfactory><tgtfactory class="com.alfaariss.oa.engine.tgt.memory.MemoryTGTFactory"><expire>3600</expire><interval>60</interval><max>100</max></tgtfactory><!-- User Provisioning --><userfactory class="com.alfaariss.oa.engine.user.provisioning.ProvisioningFactory"><main><translator>standard</translator></main><translator id="standard" class="com.alfaariss.oa.engine.user.provisioning.translator.standard.StandardTranslator"><main><externalstorage>ext_jndi</externalstorage><profile>jndi</profile></main><profile id="jndi" class="com.alfaariss.oa.engine.user.provisioning.translator.standard.StandardProfile"><account><enabled default="true" field="userPrincipalName" converter="exist" /><authentication><method id="JNDIPassword"><registered default="true" /></method></authentication></account><convertermanager><converter id="exist" class="com.alfaariss.oa.engine.user.provisioning.translator.standard.converter.exist.ExistConverter" /></convertermanager></profile></translator><storagemanager><storage id="ext_jndi" class=".external.jndi.JNDIExternalStorage"><resource><driver>com.sun.jndi.ldap.LdapCtxFactory</driver><url>&server;</url><ssl>false</ssl><security_principal><dn>&user;</dn><password>&password;</password></security_principal><dn><base>&base;</base><user>userPrincipalName</user></dn></resource></storage></storagemanager></userfactory><attributegatherer id="ax_attribgather" friendlyname="Gatherer" enabled="true"><!-- AX axschema.org --><processor id="axschemaorg_jndi" friendlyname="JNDI axschema.org AX Attribute Gatherer"class="com.alfaariss.oa.engine.attribute.gather.processor.jndi.JNDIGatherer"><resource><driver>com.sun.jndi.ldap.LdapCtxFactory</driver><url>&server;</url><ssl>false</ssl><security_principal><dn>&user;</dn><password>&password;</password></security_principal><dn><base>&base;</base><user>userPrincipalName</user></dn></resource><gather><attribute name="c" /><attribute name="company" /><attribute name="description" /><attribute name="givenName" /><attribute name="l" /><attribute name="mail" /><attribute name="mobile" /><attribute name="name" /><attribute name="postOfficeBox" /><attribute name="postalCode" /><attribute name="sAMAccountName" /><attribute name="sn" /><attribute name="telephoneNumber" /><attribute name="title" /><attribute name="wWWHomePage" /></gather><mapper><map int="http://axschema.org/namePerson/friendly" ext="sAMAccountName" /><map int="http://axschema.org/namePerson" ext="name" /><map int="http://axschema.org/namePerson/prefix" ext="title" /><map int="http://axschema.org/namePerson/first" ext="givenName" /><map int="http://axschema.org/namePerson/last" ext="sn" /><map int="http://axschema.org/company/name" ext="company" /><map int="http://axschema.org/company/title" ext="description" /><map int="http://axschema.org/contact/phone/default" ext="telephoneNumber" /><map int="http://axschema.org/contact/phone/cell" ext="mobile" /><map int="http://axschema.org/contact/postalAddress/business" ext="postOfficeBox" /><map int="http://axschema.org/contact/city/business" ext="l" /><map int="http://axschema.org/contact/country/business" ext="c" /><map int="http://axschema.org/contact/postalCode/business" ext="postalCode" /><map int="http://axschema.org/contact/email" ext="mail" /><map int="http://axschema.org/contact/web/default" ext="wWWHomePage" /></mapper></processor><!-- AX openid.net/schema --><processor id="openidnet_jndi" friendlyname="JNDI axschema.org AX Attribute Gatherer"class="com.alfaariss.oa.engine.attribute.gather.processor.jndi.JNDIGatherer"><resource><driver>com.sun.jndi.ldap.LdapCtxFactory</driver><url>&server;</url><ssl>false</ssl><security_principal><dn>&user;</dn><password>&password;</password></security_principal><dn><base>&base;</base><user>userPrincipalName</user></dn></resource><gather><attribute name="c" /><attribute name="company" /><attribute name="description" /><attribute name="givenName" /><attribute name="l" /><attribute name="mail" /><attribute name="mobile" /><attribute name="name" /><attribute name="postOfficeBox" /><attribute name="postalCode" /><attribute name="sAMAccountName" /><attribute name="sn" /><attribute name="telephoneNumber" /><attribute name="title" /><attribute name="wWWHomePage" /></gather><mapper><map int="http://openid.net/schema/namePerson/prefix" ext="title" /><map int="http://openid.net/schema/namePerson/first" ext="givenName" /><map int="http://openid.net/schema/namePerson/last" ext="sn" /><map int="http://openid.net/schema/namePerson/friendly" ext="sAMAccountName" /><map int="http://openid.net/schema/contact/phone/default" ext="telephoneNumber" /><map int="http://openid.net/schema/contact/postaladdress/business" ext="postOfficeBox" /><map int="http://openid.net/schema/contact/city/business" ext="l" /><map int="http://openid.net/schema/contact/country/business" ext="c" /><map int="http://openid.net/schema/contact/postalcode/business" ext="postalCode" /><map int="http://openid.net/schema/contact/internet/email" ext="mail" /><map int="http://openid.net/schema/contact/web/default" ext="wWWHomepage" /><map int="http://openid.net/schema/company/name" ext="company" /><map int="http://openid.net/schema/company/title" ext="description" /></mapper></processor><!-- AX schema.openid.net --><processor id="schemaopenidnet_jndi" friendlyname="JNDI axschema.org AX Attribute Gatherer"class="com.alfaariss.oa.engine.attribute.gather.processor.jndi.JNDIGatherer"><resource><driver>com.sun.jndi.ldap.LdapCtxFactory</driver><url>&server;</url><ssl>false</ssl><security_principal><dn>&user;</dn><password>&password;</password></security_principal><dn><base>&base;</base><user>userPrincipalName</user></dn></resource><gather><attribute name="c" /><attribute name="company" /><attribute name="description" /><attribute name="givenName" /><attribute name="l" /><attribute name="mail" /><attribute name="mobile" /><attribute name="name" /><attribute name="postOfficeBox" /><attribute name="postalCode" /><attribute name="sAMAccountName" /><attribute name="sn" /><attribute name="telephoneNumber" /><attribute name="title" /><attribute name="wWWHomePage" /></gather><mapper><map int="http://schema.openid.net/namePerson/prefix" ext="title" /><map int="http://schema.openid.net/namePerson/first" ext="givenName" /><map int="http://schema.openid.net/namePerson/last" ext="sn" /><map int="http://schema.openid.net/namePerson/friendly" ext="sAMAccountName" /><map int="http://schema.openid.net/contact/phone/default" ext="telephoneNumber" /><map int="http://schema.openid.net/contact/postaladdress/business" ext="postOfficeBox" /><map int="http://schema.openid.net/contact/city/business" ext="l" /><map int="http://schema.openid.net/contact/country/business" ext="c" /><map int="http://schema.openid.net/contact/postalcode/business" ext="postalCode" /><map int="http://schema.openid.net/contact/internet/email" ext="mail" /><map int="http://schema.openid.net/contact/web/default" ext="wWWHomepage" /><map int="http://schema.openid.net/company/name" ext="company" /><map int="http://schema.openid.net/company/title" ext="description" /></mapper></processor><!-- AX verify.sxip.com --><processor id="sxip_jndi" friendlyname="JNDI axschema.org AX Attribute Gatherer"class="com.alfaariss.oa.engine.attribute.gather.processor.jndi.JNDIGatherer"><resource><driver>com.sun.jndi.ldap.LdapCtxFactory</driver><url>&server;</url><ssl>false</ssl><security_principal><dn>&user;</dn><password>&password;</password></security_principal><dn><base>&base;</base><user>userPrincipalName</user></dn></resource><gather><attribute name="mail" /></gather><mapper><map int="http://verify.sxip.com/schema/verifiedEmail" ext="mail" /></mapper></processor><!-- SREG --><processor id="sreg_jndi" friendlyname="JNDI SREG Attribute Gatherer"class="com.alfaariss.oa.engine.attribute.gather.processor.jndi.JNDIGatherer"><resource><driver>com.sun.jndi.ldap.LdapCtxFactory</driver><url>&server;</url><ssl>false</ssl><security_principal><dn>&user;</dn><password>&password;</password></security_principal><dn><base>&base;</base><user>userPrincipalName</user></dn></resource><gather><attribute name="c" /><attribute name="mail" /><attribute name="name" /><attribute name="postalCode" /><attribute name="sAMAccountName" /></gather><mapper><map int="nickname" ext="sAMAccountName" /><map int="email" ext="mail" /><map int="fullname" ext="name" /><map int="postcode" ext="postalCode" /><map int="country" ext="c" /></mapper></processor></attributegatherer><attributerelease class="com.alfaariss.oa.engine.attribute.release.configuration.ConfigurationFactory"><policy id="releasepolicy.1" friendlyname="Release Policy" enabled="true"><attribute name="*" /></policy></attributerelease><!-- Business Logic --><requestorpoolfactory class="com.alfaariss.oa.engine.requestor.configuration.ConfigurationFactory"><pool id="requestorpool.1" friendlyname="OpenID Requestor Pool" enabled="true"><authentication forced="false"><profile id="authentication.openid" /></authentication><attributerelease policy="releasepolicy.1" /><requestors type="sp"><requestor id="openid" friendlyname="OpenID requestor" enabled="true" /></requestors></pool></requestorpoolfactory><authentication class="com.alfaariss.oa.engine.authentication.configuration.ConfigurationFactory"><profile id="authentication.openid" friendlyname="Login" enabled="true"><method id="JNDIPassword" /></profile></authentication><!-- Web SSO --><websso single_sign_on="true"><cookie domain="domain.com" /><view><profile_selection path="/ui/sso/select.jsp" /><user_info path="/ui/sso/user_info.jsp" /><logged_out path="/ui/sso/logged_out.jsp" /></view><authentication always_show_select_form="false"><methods><method id="JNDIPassword" friendlyname="Password Authentication"class="com.alfaariss.oa.authentication.password.PasswordAuthenticationMethod"><template path="/ui/sso/authn/password/password.jsp" /><retries>3</retries><password_handler class="com.alfaariss.oa.authentication.password.jndi.JNDIPasswordHandler"><resource realm="@domain.com"><full_uid>true</full_uid><driver>com.sun.jndi.ldap.LdapCtxFactory</driver><url>&server;</url><ssl>false</ssl><security_principal><dn>&user;</dn><password>&password;</password></security_principal><dn><base>&base;</base><user>userPrincipalName</user></dn></resource></password_handler></method></methods></authentication></websso><!-- IdP Profiles --><profiles><profile id="openid" class="com.alfaariss.oa.profile.openid.OpenIDProcessor"><privatestore>memory</privatestore><sharedstore>memory</sharedstore><usermapping>simple</usermapping><interval>86400</interval><expirytime>1800</expirytime><endpoint>https://openid.domain.com/openaselect/profiles/openid/</endpoint><confirmationpage>/ui/profiles/openid/authz_consumer.jsp</confirmationpage><xrdsdocument>/ui/users/xrds/xrds.jsp</xrdsdocument><userdocument>/ui/users/user.jsp</userdocument><error><jsp path="/ui/profiles/openid/error.jsp" /></error><websso><path>/sso/web</path></websso><associationstores><associationstore id="memory" class="org.openid4java.server.InMemoryServerAssociationStore"/></associationstores><mappings><mapping id="simple" class="com.alfaariss.oa.profile.openid.mapping.SimpleMapping"><config><idtemplate>https://openid.domain.com/[username]</idtemplate></config></mapping></mappings><extensions><extension id="http://openid.net/extensions/sreg/1.0"class="com.alfaariss.oa.profile.openid.extension.sreg.SimpleRegistrationProcessor" param_signing="true" enabled="true" /><extension id="http://openid.net/extensions/sreg/1.1"class="com.alfaariss.oa.profile.openid.extension.sreg.SimpleRegistrationProcessor" param_signing="true" enabled="true" /><extension id='http://openid.net/srv/ax/1.0'class="com.alfaariss.oa.profile.openid.extension.ax.AttributeExchangeProcessor" param_signing="true" enabled="true" /></extensions></profile></profiles><!-- Helpers --><helpers><helper id="stylesheet" enabled="true"class="com.alfaariss.oa.helper.stylesheet.StyleSheetHelper"><default location="http://openid.domain.com/css/style.css" /></helper></helpers></oa-server>



