35c3 preroll music Herald: So, Dennis, the left speaker, finished his M.Sc. in IT security this year. The next talk is based on his master thesis, InternalBlue, which is a Bluetooth experimentation framework for which he even received a prize. Jiska, the right speaker, or for you left speaker, has been his supervisor during the thesis and she loves breaking things. After several talks about wireless security, software-defined radio and Fitbits, she is now talking about Bluetooth. Please welcome on stage Dennis Mantz and Jiska Classen to their talk "Dissecting Broadcom Bluetooth". Applause Dennis: Yeah. Thank you for the introduction and welcome you all to our talk. I'm Dennis and as said I choose Bluetooth as the topic for my master's thesis and the outcome basically was I reverse engineered the firmware of a Bluetooth controller which was manufactured by Broadcom, and I built a little experimentation framework around it. And today we are not only going to present the framework, but also various kinds of use cases around it, and we also brought along some demos. Now, if you start such a big reversing project you certainly know that this will not be an easy task and also quite time consuming. So you might want to ask: why did we do that in the first place? So there are several good reasons. For one, dissecting the firmware and exploring it for reverse engineering is really helpful if you want to get insights from a security perspective. And this is what I had in mind when I first started my thesis. But then secondly and even better, once you're able to modify the firmware you can actually leverage this fully featured and working Bluetooth implementation to be your very own experimentation platform, where you can add new features or can also alter existing behavior, and it almost feels like you can add a kind of open source touch to a closed source and proprietary platform which I really like about this project. Certainly this requires a certain background in many different departments like security, code analysis, wireless signals, embedded programming, and also not every researcher has resources and time to do such a reverse engineering project, but we think that the outcomes of this project are really helpful and beneficial for the security community. So, and last but not least we actually really like reverse engineering. So we already had great experiences with similar projects in the past. For example, some of you might know the NexMon project, where we reverse engineered and also modified the firmware of a Wi-Fi controller. Okay, before we show our work, we first have to introduce a few Bluetooth protocols which we will be mentioning quite a lot throughout this talk. So the first one would be the host controller interface. Some of you might know that, it's the HCI, and it's a protocol layer between the Bluetooth controller and the host system, where the health system would be for example an Android phone, or iOS, or Linux, or any other operating system which implements those upper layers of the Bluetooth protocol stack, and all the lower layers are actually implemented inside the Bluetooth controller. And one of them would be for example the Link Manager Protocol, the LMP. And this one is also really interesting. It actually manages connections to other remote Bluetooth devices. For example, pairing is also done on this protocol layer. And what's an interesting difference is that the Link Manager Protocol is actually transmitted over the air to communicate with other devices, whereas the HCI protocol is only used locally to communicate between the operating system and the Bluetooth controller. And another interesting fact to know is that the HCI is actually able to be observable from the host site. So if you maybe tried to capture on a Bluetooth interface in Linux before, or if you turned on the BT snoop log feature under the development settings in Android, you probably have seen HCI packets in Wireshark before, because this is an easy task to do. However you probably did not see LMP packets in Wireshark before, because this protocol layer is actually implemented inside the controller and it's not observable from the host side. You won't see those packets if you just capture on a Bluetooth interface because you can only see what's above the HCI layer. And so the other thing is that you cannot also simply sniff this from the air because Bluetooth has frequency hopping and encryption. So it's a lot harder to sniff those packets from the air just as with Wi-Fi for example. But today we try to change that. Now I will introduce the framework I developed and show its features, and later we go into more details and also present some demos. As already mentioned, we named the framework InternalBlue. It's open source and you can find it on GitHub and currently it's only compatible with the Nexus 5 if you want to use all of its features, but we are also working to port it to other Bluetooth chips in other smartphones, and also other platforms like the Raspberry Pi, and yeah, soon you will have more devices which are supported by this framework. We also already gave a talk where we introduced the framework and give some details about the internals and how it works. So if you're interested and want to learn more then you should check out our previous talk which was also recorded and you can find a link down at the bottom of the slide as well. Basically in a nutshell we use vendor specific HCI commands which are implemented by Broadcom and allow us to read out and modify the firmware while the chip is actually running. And on top of this, we basically implemented a Python API to interact with the firmware, and we use this API to then implement all kinds of features which we find interesting. For example one of the first things we did was implementing such a LMP monitoring mode so that we can finally see LMP traffic on our laptop in Wireshark. And what comes along with this is that we are also able to inject arbitrary LMP packets inside existing Bluetooth connections. And this turned out to be also very interesting because then we can test how other devices react to maybe packets they don't accept or yeah, at least it's very good for experimentation and for example we use this to write a little proof of concept script for the fixed coordinate invalid curve attack that was released this summer, not by us but by other researchers, and we were able to actually prove that other devices are vulnerable to this attack. So this is a really helpful and practical tool. Also, at some point we found a crash our own. So we found back in some older Broadcom firmwares which allows us to remotely crash the firmware in some of the Broadcom chips, and in some cases we are even able to execute a limited set of functions, so this might be even more interesting than just a crash - but more on that later. Now if you first start with the main thing about this is, how do we actually modify the firmware, How is patching being done? And I already said that Broadcom uses those vendor-specific HCI commands. To read them out, they are: READ_RAM, WRITE_RAM and LAUNCH_RAM, and they do exactly what you think they would do. So basically we are able to read and write in the address space of the firmware, and also to execute arbitrary code snippets in the context of the firmware. And this is pretty powerful. Broadcom actually uses this to do their firmware updates, so they ship so- called HCD files, which are files that contain firmware updates. If you have a Broadcom chip inside your laptop or inside your phone, you should find such a file with the extension ".hcd" on your filesystem, and those files actually contain just a sequence of those commands to upload all the changes and patches, and they're even able to do temporary patches to the ROM of the firmware by another mechanism that they call "Patchram." We also had to reverse engineer this and now we are finally able to do all those patching ourselves. Now, what is also interesting is that those files, the .hcd files, are neither encrypted nor signed. So it's quite easy to actually modify them once you understand how they work. And also the firmware itself on the controller is not obfuscated. So there are basically no major attempts done by Broadcom to prevent anyone to reverse engineer and modify this firmware. Currently, we write our code and assembler, so we write assembler patches, but we're working on including this in our NexMon project to finally be able to write patches in C code, which will be more comfortable and portable. First of course we have to do the reversing. Jiska: Yeah. So as Dennis told you the code is not obfuscated but there is no strings and no function names. So you end up with thousands of functions that just have no name, it's just sub 1, sub 2, sub some-thousand something. And then there is a tool that I used which is called CodeCut to try to separate those functions into modules. But also the modules don't really tell you that much because the problem is: then you have hundreds of modules and then you know which modules are central and you might to start reversing but it's not really fun. You have 2800 pages of Bluetooth standards, you might have some parameter checks in there, so you have bounds which the parameters should be in, and then you search for those numbers again in assembly code and you might find some matches and then you have concrete functions. So that's what we both did for months. staring at standards, staring at the code. Then people asked me: "Yes, that's not nice, but does it work on on recent devices?" And now the problem is even the Nexus 6P has a firmware from end of 2014. So I just decided to buy a development board, which has also a slightly outdated firmware, I mean just one year old. Meanwhile, this part of Broadcom was acquired by Cypress so it's called Cypress. But it doesn't matter, it's still the same mechanisms in there. And I was able to use the same HCI commands, so I can still modify the firmware on this, I can extract the firmware, and actually I just got that on December 6, and 3 days later I had all function names because somewhere someone forgot a patch.elf with all function names in the development kit. So that's 11 000 function names, 3000 object names. Nice. Yeah. Applause J: So, buy development kits earlier. Laughter D: OK. Let's get closer to the first demo. So as mentioned we have this Link Manager Protocol which does interesting things like pairing and all kinds of stuff. And it's implemented in the firmware so we cannot really see it from outside, we cannot capture it in Wireshark. And we wanted to change that. So we wrote a patch that will actually hook some of the functions inside the firmware, those that are handling LMP, to actually forward all the traffic over the HCI interface back to our Android phone. And then on the Android phone we use a Android Bluetooth stack which has debugging features compiled into it so that we can also forward all the HCI traffic via TCP to our host computer. And from there we can then show it in Wireshark. We use a custom LMP dissector plugin which we borrowed from the Ubertooth project. And yeah, that's it. We have a LMP monitor mode. I will show that in just a second. We also have an LMP injection mode, so we can simply invoke functions inside the firmware. And so we can also invoke the function which actually sends LMP packets to other devices which are connected to our Nexus 5. And so, yeah, with this we have both channels of the communication and can actually send arbitrary traffic to other devices. So, for this let's go into a command line and start the framework. The framework has a command line interface we can use all of its features and interact with the firmware and to start a monitor mode, I can just type this command which will start a Wireshark instance and also install all the patches which we need into the firmware of the phone. Now from this time on, we actually have all LMP traffic forwarded and shown in the Wireshark frame, but currently we don't have a Bluetooth connection, that's why you don't see anything. Ok. Yeah, so we still need a Bluetooth connection, right? I could just pair those devices to create a connection and then we would see LMP traffic, but I want to show something else. So this will be a combined demo actually, because Bluetooth has some more interesting features which maybe not everyone knows - at least for me that was a surprise when I first learned about this. So even if your device is not being set to be discoverable by other devices, it still accepts connections from any other device, the other device just needs to know your MAC address and can simply connect to you, without even being paired before, you don't even notice this because the device does not have to trigger the pairing process, and then the user won't be notified. And so by just finding out the MAC address of any other device I can connect to it on this LMP layer and start communicating with it. And finding out the MAC address is also not that hard. There was another talk which we mention down on the bottom of the slide, it's called "Bluetooth smells like chicken" by Dominik Spill, Michael Ossmann and Mark Steward, which shows that this is actually possible and not hard to do. So, I can actually just type "connect" and give it the MAC address of another phone. J: We need again... ah great. D: Yes. Perfect! On the right side you actually see a Nexus 6P, which will be our target. You can hopefully barely read the MAC address which is shown there on the left side as the Nexus 5 which is the phone we use for for testing like the phone which is connected to my laptop here and is used for InternalBlue. And as you also can see the Nexus 6P is currently not in the Bluetooth menu, so it's not actually discoverable by by means of Bluetooth. I still can connect to it when I actually type "connect" and the MAC address this might may take a few ... no it worked directly, perfect. So now we can see that we actually have traffic on the LMP layer. What you also might notice that that on the Nexus 6P there wasn't anything. So the user didn't notice, but I have an established connection to this other phone and you can see the LMP traffic which is going on on this protocol layer. As you can see it is quite a lot: There are feature requests, version requests, also name requests so that the phones know how the name of each other is. And yeah, from now on I can also try to inject arbitrary LMP packets. For example I can send an LMP packet with code "01" which would be a name request and ask for a name at offset 0. And you should see that the name request has popped up here and the other device even answered with its name. If you scroll down here should at some point see that we have the name "Nexus 6P" because we don't renamed our devices. But I can also send arbitrary LMP packets so I'm not bound to anything that is in the specification. J: You already got the detach! D: So the other device actually detached which happens from time to time ... can reconnect. J: If we don't do anything in between we will get a detach from the other device because we didn't do a paring or something so we re-established connection. And now Dennis is going to send something that is not specified ... just an LMP 99. D: So it's even saying here this is unknown. But as you can see the payload is actually sent and the other device correctly answers with "this is not accepted and I don't want this". But you can probably see that this is very interesting for a security researcher, because now he can see how the other device happens in certain conditions, if you send them certain packets. Yeah. Quite nice to actually experiment with. OK. I think that's it for the first demo. Let's stop this and go back to this. J: I don't need the in-screen anymore. Yeah. Great. Okay. Applause D: Thank you. J: Another thing in the Bluetooth standard is that you need a possibility to pair devices, which have no input and no output capability, so they cannot show a PIN and you cannot enter a PIN. And this is the standard for any headset. But also a Man- in-the-Middle can change the input/output capabilities and then you might just get displayed this "yes/no" pairing without a PIN request. Even though your smartphone could show more than this. And I have a demo video again of the same thing. That's this one. So on the left hand side I have again a Nexus 5 on the right hand side I have an iPhone and I am pairing them. I just changed the request and the capabilities that it's, that I'm not having input output capability. So you can see on the right hand side on the iPhone it's just showing this "yes/no" question. And on the left hand side you still have the same algorithm which just does the same thing. So pairing will succeed, there's the same cryptographic routines but you are not being warned on the iPhone and that's a bit critical. So the standard is not saying: "Please warn the user to check if the other phone really has no input output." So I just say pair and it pairs. Yup. Applause So far that's only things that are as they are in the standard, so it's not too surprising. So the question is: Can we find more bugs? Yeah. Finding bugs in Bluetooth. Actually I didn't even want to find bugs in the beginning, I just wanted to understand how everything works. So I went through the handlers and I checked the... there's these checks of the parameters, so there is a parameter check in the beginning of each handler that shows me a bit which handler it could be according to the standard. And suddenly there is a handler which does not have any check. So there's just the missing "if" somewhere. And then I compared to firmware versions that I had and found out they silently patched that already some time between June 2nd and August 19th in 2014. But they never updated older devices, so they never shipped an .hcd-patch. So I contacted Broadcom and said: "Yeah you have a problem!" and they said "No, we don't." And I said: "You really have a problem there." And so on... And then they said: "It doesn't exist." And then I showed them more and then they said "Yeah ok, but it's not compliant to the standard what you're doing!" Laughter Applause I'm sorry, my next exploit will be standard complaint. Laughter And then we discussed a bit more and then they said: "It does not affect Wi-Fi performance." Well, in my tests it did... whatever... doesn't matter. So basically you can switch off Bluetooth on another device and then Bluetooth restarts typically depending on configuration. And as Broadcom didn't tell me much about this I started testing out things on my own. So which devices actually still have a firmware that is affected in their Broadcom chip? It's quite a lot. So it's like the iPhone 6, MacBook Pro from 2016, of course my Nexus 5, Raspberry Pi 3 and so on. And this list is really not complete this is just like, I asked my students: "Can I test your smartphone?" Some of them said: "No. Are you crazy?!" Laughter And that's the list I got just during the last weeks. And this is the one I'm going to demo. I just named it BT-B-g0ne, so you can kill the Bluetooth of annoying songs or something. Applause So I need to go into the Bluetooth here, yeah, screen-in-screen... That's great. I even had a "Bluetooth is not real" and so on. That's really great. What is going on here. D: OK. J: Yeah let's go for the demo. So first we are going to patch the Nexus 5 with our funny attack and then just press enter and now it takes a while until the the iPhone is realizing like "Oops my Bluetooth is gone." So if I'm playing music you will see it faster, the music would already stop playing. Let me just enter another time. Just... Yes, and there it's gone! Oops! Applause And then it appears again and so on I can just do it again and again and again. And it's actually so fast that the other person could not play music, because music also stops playing after this disconnect. Yeah that's the demo. Now we were wondering, yeah, what is actually happening. So actually that the crash - the crash is the best case. So there is a handler. I call it "Handler A", because I'm not leaking the actual problem here. Broadcom didn't fix it yet. So there is this handler which just should take, let's say, two arguments or something. But it doesn't check the parameter range and the compiler likes to put one handler after the other. And then we just go into the next handler, and so we have something like 250 functions that we can call from the next handler but with wrong parameters. So it's a bit buggy, and sometimes if a function expects to get other parameters it just crashes. But otherwise we can execute functions. And on the Nexus 5 we looked a bit more into this and I found out that I can enable test mode. So test mode should be something only locally to be enabled on a phone if you have root access to the driver and then you tell the driver: "I'm now going to test your frequencies and so on please go in test mode." But I can now do this remotely. Applause So I didn't bring this one as a live demo. I mean I have a HackRF with me, we can do that during Q and A, because the problem is there is probably too much going on in the spectrum here and you wouldn't see the test mode starting anyway. So I'm just doing the attack and then on the left hand side, I just took a quick pause, you can see the test mode, so that's just the default test mode hopping around in all channels. The packets now appear a bit out of order because I just put them into a queue, send them. This "???" payload is the malicious payload. I just send "test_control" and "test_activate". And first they get this not_accepted. And then after this "???" payload you can see that it's accepted. And on the left hand side you can still see that there is the test mode going on, so really block things for longer time. And then it's accepted, magic! Applause If you combine this with disabling adaptive frequency hopping you can even force the other device, which is also then in test mode, to stop hopping for a while and then just jam a selected frequency, so you could also jam a selected Wi-Fi frequency that this device is currently using. And it's a combo chip, so you would really be on the same antenna. We can confirm this works on Nexus 5 and Xperia Z3, because they both have to be same BCM4339 chip. It might also work on other devices with that chip. It's a bit random to find out what is in there. You need to find teardowns and on. So when finding this bug we started developing a toolchain. So Dennis added a feature for tracepoints. You can add now a tracepoint to a function which is then called once and dumps all the registers and the stack and heap. I then fed this into an emulation framework, which is currently quite slow with unicorn and radare2, but I get a full call trace, which is very nice to look at. So I have an idea what is going on, what is changed in the memory. And I currently have a student working on a qemu/gdb set up, which is faster but producing less output, just to fuzz more efficiently. However, you get really a lot of output that we weren't able to completely analyze yet, so there's probably more. Maybe tell you somewhen later. Now you need to somehow fix that bug. And that's that's really a problem, and that's also why I didn't tell you the exact payload that is causing these issues. Because, well, the fix would be in one of those .hcd-files. It would be plaintext. It would not be signed and it would just tell you directly "This handler is vulnerable in exactly this position!" and so on. The patch is just 14 bytes, but you need to install it and then it's easy to understand what it does, right? So I had an idea: Let's do some more generic fix. So what I planned to do was having a generic filter, filtering some packets like that you won't reply to, pings connection establishments and so on, to untrusted devices. And then just over Christmas I started testing that one with bigger setups, with more phones and so on. And then I realized: OK if I throw away some packets and the other device does not expect me to throw away packets, then the Bluetooth stack of a device which now tries to connect to me is going to crash. So I had the next bug! So I tried to fix one bug. I get the next bug, you know this. So I actually cannot release any fix, because ... uh. Yeah. Because all of them still cause the next bug and so on. So how long will this bug be around? Pretty long probably because there is some devices which are no longer getting vendor updates. It needs to be in the vendor update, it needs to be this special .hcd- file. And so on. I mean we can also publish .hcd-files if needed. That's possible with our framework. That's the good news, but it will probably never be an official update. And the vendor updates will obviously leak the vulnerability. So it's chicken-egg. As we found this bug still to be present in devices that were produced in 2016, we recommend you to turn off Bluetooth - especially if you have a Broadcom chipset produced before 2017. But in general just turn it off. That's probably the safest option. And we found out that very old devices having something like Bluetooth 3.0 are not vulnerable, because that feature that we used didn't exist back then. But still it's a large number of devices having this issue. So, thanks for listening. Long Applause Herald: And again if you have questions we have 8 microphones in the hall. Please line up at the microphones and you can ask your questions. The Signal Angel has the first question from the Internet. Signal Angel: Yes some of the Internet asked if you can guess the Bluetooth MAC address from the wifi MAC address of a device. Jiska: Yes. So if I go into... Can we switch the camera on again? On my magic box here. Is that possible? Yes. So actually, if you go to the "Settings", "About", and then you will see that the WiFi and Bluetooth MAC address, they are just off by one. Laughter and applause Dennis: So yeah. You have to note however that this is not the case with every phone. So usually I think new phones actually try to randomize their Wi-Fi MAC address to be not traceable anymore. Not sure which devices do that. I think the Nexus 6P does that so the first part will be the same, because it specifies which vendor this chip was made from. But then, the lower and least significant bits will change. So it's sometimes possible, sometimes not. Yeah. I think that's the answer to this question. Herald: OK. The next question was from the microphone 8 at the very end of the hall. Eight: Hello. Thanks for your talk. I was wondering in your second demo, you showed us how you connect to a device, just using the MAC address and this device was not advertising his name. How do you find a MAC address, if it's not advertising? Dennis: Yeah. So there are ways to find out the MAC address of devices which are nearby you. So for example if your device has Bluetooth turned on but it's not discoverable at the moment, but you're listening to music on your headphones or if you have a smartwatch connected or any other Bluetooth device connected, then you will certainly send Bluetooth traffic and you can sniff that from the air. For example with a software-defined radio or an Ubertooth. And so in the talk we mentioned and we also have a link to this in the slide, I guess it was here, "Bluetooth smells like chicken". Michael Ossman and Dominic Spill, they actually explained very detailed how you can then infer the MAC address from those packets you sniffed. And, yeah, it's doable. It's not as easy as with Wi-Fi but it's certainly possible. Eight: Thank you. Herald: Okay. The next question was at Microphone number one. One: Thanks for your talk and demos. The question is, does this firmware have any mitigations against exploitation? And if we imagine that it has, would it help against such bugs? Dennis: So. There's no, like real address randomization, kind of the obvious way, because there's... Most of the things are actually global offsets inside the firmware. So everything is at fixed addresses, like you would use global variables all over. There's also the RAM, it's actually executable, so you can execute on the stack, you can execute on the heap, everywhere. So there's no real mitigations for such a exploitation. It's like, I don't think even the newer ones have that sort of, and the Nexus 5 obviously. Jiska: And another thing that really helps us. So LMP has a version_request, version_response, which is always sent. So I can ask a device actually: Do you have a vulnerable firmware and which version? And then I can run exactly the exploit. And the firmware, I mean, the firmware is standard and I can just run the addresses that I know for a certain firmware. Herald: Okay. The next question was at microphone number two. Then again number one, three and five. Two: Hi. Thanks for the work especially for BT-B-g0ne since like it's the TV-B- Gone. And I'm not sure of which kind of iPhone that works, because you had a slide about iPhone up until 6, and then you had a slide that saying if the chip is older than 2017. So does that work with the last phones as well? Jiska: Only up to iPhone 6 that was used was the latest I could get. So if you have an iPhone 8 or something, our attack does not work. Two: So you're going to work on it? Because a lot of people are playing very bad music and have new phones. Laughter Jiska: You mean the attack. The attack is not working on iPhone 6, but the general framework like patching .hcd-files or changing the firmware will obviously work on any Broadcom chip. Two: Okay, thanks. Dennis: Broadcom actually uses this mechanism for all their chips, all their Bluetooth chips, so you can use this framework for every Broadcom chip, every device that has a Broadcom chip. You only need to do the reverse engineering, as to get like the real addresses and offsets inside the firmware to do meaningful patches. Jiska: But for this you always need to be, to have a rooted device. You need root access on the device to run our patching framework. Two: Okay. Thanks. Herald: Okay. Now the question at microphone number one. One: Do you have a list of vulnerable chipsets? So I can check if my phone is vulnerable if it's not like in those slides. Jiska: Yeah, but it's very incomplete. So I also have that, the version numbers and subversion numbers of those phones. But just consider the time range. So if your smartphone does Bluetooth 4.0 to 4.2 and it has a Broadcom chip then it's very likely to be vulnerable. Herald: Okay, now the question from microphone number three. Three: Thank you for the codes and the talk. Quick question, so have you looked at a car Bluetooth? And if not, are you thinking about it? Dennis: So I actually used this tool. As I mentioned previously, we are also able to test other vulnerabilities, for example this fixed coordinate invalid curve attack. And so I used my tool to actually check if a car radio was vulnerable to this fixed coordinate invalid curve attack that was released this summer. So it's basically patched since half a year but the car was still vulnerable to this. So the framework is basically usable to test car radios as well, but I haven't like specifically looked into a car radio. Three: Thank you. Herald: Okay. Now a question from Microphone number five. Then we take a question from the Internet and microphone number six. Five: What is the attack surface exposed by your exploits? What's the worst case? Could you manipulate memory or something? Jiska: Worst case it's hard to estimate. I mean we can change some memory addresses at least in the Nexus 5. And for each smartphone there are other functions by the compiler put there. So to really know what is happening, we would now need to analyze like really tons of firmwares and check what is in there and do some fuzzing. We already found out that some things only happen if you combine multiple packets and so on. So it's really hard to estimate what is the worst case. So the very worst case would be, so to say, that you can run arbitrary code in the Bluetooth, in the Bluetooth firmware itself, and then the next worst case would be if there would be another vulnerability in the driver, that you could escape the firmware. So that would be the next step. But that really requires an exploit chain. So the very worst case would be something similar. So there has been vulnerabilities in the Wi-Fi part of Broadcom chips where you had the possibility to really run an exploit chain which then rooted a device in the end. But it's hard to estimate if you can do it with this or not. Herald: OK. Now the question from the Internet please. Internet: Do you know if any older but still supported devices like old MacBooks are patched and can you actually detect this in any way other than a chip crash? Jiska: Not really, so we can try to not crash the chip by first checking if it is sending appropriate answers, but typically the really only thing to be sure is that it crashes. So that so far is the only way, because I mean obviously, if Broadcom would tell "the following chips are vulnerable", which they didn't so far, because that's also to protect themselves probably, then you could be sure. But yeah as of now that's the only way to check it. Herald: Thank you. Now the question from microphone number six please. Six: Yeah. Would it be possible to increase the Bluetooth radio transmission power by patching the firmware? So that Bluetooth works across entire buildings and not only in a single room? Dennis: Yeah. So the thing is, we are actually now patching the firmware of the chip, and the firmware does like all the the link layer stuff of Bluetooth. The real physical part is probably done in another component inside the chip which may be running another kind of small real- time firmware and we haven't found that yet. We are still looking for it because that must be in there somewhere, like that Bluetooth modem and maybe we can actually change the settings for this modem. I don't think it will be too drastical. But maybe if you're in different areas of the world and like your Bluetooth has different strengths in different areas of the world, you can maybe manipulate that. But we haven't found it yet. Six: OK. Thank you. Herald: Okay. Next question is coming from microphone number four. Four: Does the Bluetooth chipset have access to system RAM? Dennis: Sorry I didn't get the last word. Jiska: The system rights or what do you mean? Four: The system RAM, memory. Dennis: You mean the memory of the main processor like where Android or iOS is running on? Four: Yes. Dennis: No it's not like as with Wi-Fi where you have direct memory access. But Bluetooth, the HCI interface is the only interface between those two processors. And this is usually done over either USB or in the Nexus 5 is actually UART. Herald: Next question is coming from microphone number three. Three: Many thanks for the enlightening and scary talk. I missed a little bit of the beginning maybe that question was inside there. Did you or do you considered to disclose this vulnerability for example to BSI (Bundesamt für Sicherheit in der Informationstechnik)? As I would consider their obligation to inform general public like put a note on their website saying: "Look, if you're running a certain smartphone you're vulnerable to a certain attack!" And that would put much more stress on the vendors to really look into this. Jiska: Yeah that sounds like a good option. So far we're, so we asked Broadcom when we can publish things and at least they agreed that it's no problem to publish it in summer, then it would be public for everyone. But yeah, BSI would also be a nice option. Three: Thank you. Herald: OK. Is there another question from the Internet? … Please switch on the microphone for the Internet. Internet: Hello? Hi. So do you know if any devices have been patched yet, which have not been released after 2017, or are there no rolled out patches? Jiska: I don't think so. So, it took Broadcom two months to actually confirm that there is this vulnerability. So on December 3rd they said, ooops it really exists. And then on December 9th, they were like: "Ooh, do you really plan to do that talk here?!" Laughter And I did the most recent iOS update on the iPhone 6 that I just showed you. And this one is still valuable. I think it takes some time for testing. So I would say the first patches will come out maybe in 1, 2 months, but we don't know. Herald: Okay. One last quick question from microphone number one. One: So is it … do you think it is possible to trace back when was this vulnerability introduced, so we can go back and try to hack old devices that probably have the same firmware or firmware vulnerability? Because they should be backward compatible, right? So if the same handler is implemented I know in 2012 first and for the first time then uh... Jiska: Yeah. One: Probably the devices can be narrowed down, right? Jiska: So at least.. so the Nexus 5 has a firmware from 2012 actually. So somewhere, so the June 2nd is when it still existed in 2014. I don't know. So in each firmware there is a build date and I would then need to extract the firmware of vulnerable devices and so on, so it's a long process, but at least the vulnerability was there for multiple years. Herald: Okay now give please a huge round of applause for Jiska Classen and Dennis Mantz for their talk. Applause Dennis: Thank you! Applause 35C3 outro music subtitles created by c3subtitles.de in the year 2019. Join, and help us!