# MediaChunks

chunk_id: 205_chunk_9
chunk_text:
ecosystem. 521.14s - 527.34s | That means technology producers, yes, and certainly the federal government, but it also means all of 527.34s - 535.10s | you. I know that you all are up to it. And I know that the same value set that drives responsible 535.10s - 541.94s | vulnerability disclosure will lead you to continue to step up for the protection of the Internet. I 541.94s - 547.94s | know the Internet is a safer place today because of all of your efforts. But I hope you can 547.94s - 555.94s | appreciate the magnitude and impact of the hard problems defending cyberspace. They may seem easy to 555.94s - 561.98s | some of you, but the President can't simply issue an order and solve those problems. We've known 561.98s - 568.18s | about vulnerabilities in the Border Gateway Protocol for decades. Still, much of the U.S. 568.18s - 573.90s | Internet traffic is subject to hijacking. Memory-safe programming languages have similarly been 573.90s - 581.82s | around for years. Still, critical software that underlies our society is written in C simply 581.82s - 588.14s | because that's what's convenient. The tragedy of the commons around open-source software 588.14s - 595.22s | development is a well-understood phenomenon. Still, vital packages are maintained by tiny bands of 595.22s - 603.46s | volunteers operating on a less-than-shoestring budget. Policy can address some of these problems. 603.46s - 609.94s | Now, I'll even go further. Policy is essential to addressing these problems, but policy does 609.94s - 615.30s | require time. The people of the United States have entrusted their government with awesome 615.30s - 621.26s | responsibilities. And as we work to use them to improve our cybersecurity posture, we must ensure 621.26s - 627.18s | that we do so responsibly, with an eye towards outcomes that preserve the innovation and 627.18s - 632.94s | decentralization that have made the Internet the miracle that it is today. Most important, 632.94s - 638.14s | though, is that we continue to work together. At the core of our approach at the Office of the 638.14s - 644.22s | National Cyber Director is partnership. We prioritize hearing and learning from a diverse 644.22s - 649.74s | array of stakeholders, and you all are key constituents of ours. I know that Jay and I will 649.74s - 655.86s | dig into some of the


chunk_id: 205_chunk_10
chunk_text:
588.14s - 595.22s | development is a well-understood phenomenon. Still, vital packages are maintained by tiny bands of 595.22s - 603.46s | volunteers operating on a less-than-shoestring budget. Policy can address some of these problems. 603.46s - 609.94s | Now, I'll even go further. Policy is essential to addressing these problems, but policy does 609.94s - 615.30s | require time. The people of the United States have entrusted their government with awesome 615.30s - 621.26s | responsibilities. And as we work to use them to improve our cybersecurity posture, we must ensure 621.26s - 627.18s | that we do so responsibly, with an eye towards outcomes that preserve the innovation and 627.18s - 632.94s | decentralization that have made the Internet the miracle that it is today. Most important, 632.94s - 638.14s | though, is that we continue to work together. At the core of our approach at the Office of the 638.14s - 644.22s | National Cyber Director is partnership. We prioritize hearing and learning from a diverse 644.22s - 649.74s | array of stakeholders, and you all are key constituents of ours. I know that Jay and I will 649.74s - 655.86s | dig into some of the details on various initiatives, but we will also continue to seek your 655.86s - 661.10s | feedback throughout the rest of this weekend and beyond. So thank you again for everything you're 661.10s - 668.26s | doing every day to passionately protect our digital ecosystem. And thank you again for welcoming me to 668.26s - 668.86s | DEF CON. 677.71s - 685.79s | Okay, so to start with, Harry, be really careful about this table, because the previous speakers 685.79s - 690.99s | are messy and there is booze all over this table, and if we touch it, we're going to stick to it. So 690.99s - 694.99s | I would just be careful about that. Second, remember all those questions that we said we were 694.99s - 700.59s | going to talk about? I'm not going to start with those. Yeah, so the ONCD staff here is starting to 700.59s - 708.59s | panic a little bit. Because you said such, you know, a word that we don't use here at DEF CON 708.59s - 714.99s | often enough, the Internet is a freaking miracle. And I mean that in two ways, and I'm going to ask 714.99s -


chunk_id: 205_chunk_11
chunk_text:
details on various initiatives, but we will also continue to seek your 655.86s - 661.10s | feedback throughout the rest of this weekend and beyond. So thank you again for everything you're 661.10s - 668.26s | doing every day to passionately protect our digital ecosystem. And thank you again for welcoming me to 668.26s - 668.86s | DEF CON. 677.71s - 685.79s | Okay, so to start with, Harry, be really careful about this table, because the previous speakers 685.79s - 690.99s | are messy and there is booze all over this table, and if we touch it, we're going to stick to it. So 690.99s - 694.99s | I would just be careful about that. Second, remember all those questions that we said we were 694.99s - 700.59s | going to talk about? I'm not going to start with those. Yeah, so the ONCD staff here is starting to 700.59s - 708.59s | panic a little bit. Because you said such, you know, a word that we don't use here at DEF CON 708.59s - 714.99s | often enough, the Internet is a freaking miracle. And I mean that in two ways, and I'm going to ask 714.99s - 720.91s | you to expand, but let me go into it. Because miracles are two things. One, the Internet is 720.91s - 729.31s | probably the most transformative technology since Gutenberg. Since we came up with movable type, the 729.31s - 734.91s | Internet and the things around it have probably transformed us as a species more than anything 734.91s - 741.35s | else. And just imagine if the Pope, the petty princes of Europe could have known what was being 741.35s - 744.85s | printed, who was printing it and to whom it was being passed. We wouldn't have had the 744.85s - 750.31s | renaissance. The Internet is this real miracle that we often take advantage of. And it's a 750.31s - 756.81s | miracle in another sense too. A lot of times a miracle is just something that is really, really, 756.81s - 764.71s | really, really hard and still comes to be. And when I see this community, I think a lot of my 764.71s - 770.51s | colleagues in academia and others just take for granted that the Internet is stable at large 770.51s - 778.51s | scale. Like, oh, it just works. And I'm


chunk_id: 205_chunk_12
chunk_text:
720.91s | you to expand, but let me go into it. Because miracles are two things. One, the Internet is 720.91s - 729.31s | probably the most transformative technology since Gutenberg. Since we came up with movable type, the 729.31s - 734.91s | Internet and the things around it have probably transformed us as a species more than anything 734.91s - 741.35s | else. And just imagine if the Pope, the petty princes of Europe could have known what was being 741.35s - 744.85s | printed, who was printing it and to whom it was being passed. We wouldn't have had the 744.85s - 750.31s | renaissance. The Internet is this real miracle that we often take advantage of. And it's a 750.31s - 756.81s | miracle in another sense too. A lot of times a miracle is just something that is really, really, 756.81s - 764.71s | really, really hard and still comes to be. And when I see this community, I think a lot of my 764.71s - 770.51s | colleagues in academia and others just take for granted that the Internet is stable at large 770.51s - 778.51s | scale. Like, oh, it just works. And I'm like, no, doofus. People are working weekends and 778.51s - 784.51s | they're missing kids' birthdays and they're missing every holiday for years to keep it running. 784.51s - 791.47s | You know Apollo 13, yay, nerds, right? It's one of our favorite movies, right? And what did 791.47s - 797.87s | those NASA engineers have to do to get Apollo 13 running, right? They took all of their stuff and 797.87s - 803.91s | they had to completely nerd how can we make this work. Y'all are Apollo 13ing every week to 803.91s - 808.91s | keep the Internet up and it just gets taken for granted and a lot of times it ticks me off. So I 808.91s - 812.33s | just wanted to say thank you very much for acknowledging and using that word that we don't 812.33s - 820.33s | enough. Thank you for mentioning that. It's unfortunate that miracles like that are taken for 821.33s - 827.33s | granted. I think if we take the time to reflect on the impact of our daily lives that the digital 830.99s - 837.71s | foundation has, it won't be taken for granted. But we have become accustomed


chunk_id: 205_chunk_13
chunk_text:
like, no, doofus. People are working weekends and 778.51s - 784.51s | they're missing kids' birthdays and they're missing every holiday for years to keep it running. 784.51s - 791.47s | You know Apollo 13, yay, nerds, right? It's one of our favorite movies, right? And what did 791.47s - 797.87s | those NASA engineers have to do to get Apollo 13 running, right? They took all of their stuff and 797.87s - 803.91s | they had to completely nerd how can we make this work. Y'all are Apollo 13ing every week to 803.91s - 808.91s | keep the Internet up and it just gets taken for granted and a lot of times it ticks me off. So I 808.91s - 812.33s | just wanted to say thank you very much for acknowledging and using that word that we don't 812.33s - 820.33s | enough. Thank you for mentioning that. It's unfortunate that miracles like that are taken for 821.33s - 827.33s | granted. I think if we take the time to reflect on the impact of our daily lives that the digital 830.99s - 837.71s | foundation has, it won't be taken for granted. But we have become accustomed to a certain way of 837.71s - 843.49s | life and we expect things to always be there without looking behind the curtain and seeing those 843.53s - 849.53s | folks working. So let's dive in. We're wearing some bling here. So I got one because I asked and I 858.41s - 864.53s | used to work in the office. Can you talk about the badge you have on top here? And how can people 864.53s - 869.45s | get them? The badge is the Office of National Cyber Director. Hopefully you all got them last 869.49s - 876.29s | year. And hopefully you'll get them this year. You ought to take a look at the open source 876.29s - 882.57s | software security report that we issued yesterday. There are some clues there. Read it 882.57s - 889.91s | carefully. That's the first clue I'm giving you. You can also take a look at our GitHub account to 889.91s - 895.79s | get additional clues. But they are here and available. And again, I'm just going to call some 895.79s - 900.41s | things out here. When I was at White House, I started in 2003. I had already


chunk_id: 205_chunk_14
chunk_text:
to a certain way of 837.71s - 843.49s | life and we expect things to always be there without looking behind the curtain and seeing those 843.53s - 849.53s | folks working. So let's dive in. We're wearing some bling here. So I got one because I asked and I 858.41s - 864.53s | used to work in the office. Can you talk about the badge you have on top here? And how can people 864.53s - 869.45s | get them? The badge is the Office of National Cyber Director. Hopefully you all got them last 869.49s - 876.29s | year. And hopefully you'll get them this year. You ought to take a look at the open source 876.29s - 882.57s | software security report that we issued yesterday. There are some clues there. Read it 882.57s - 889.91s | carefully. That's the first clue I'm giving you. You can also take a look at our GitHub account to 889.91s - 895.79s | get additional clues. But they are here and available. And again, I'm just going to call some 895.79s - 900.41s | things out here. When I was at White House, I started in 2003. I had already been coming at 900.41s - 907.07s | that point to Black Hat for DEF CON for a couple of years. And they wouldn't let me. And now 907.07s - 913.75s | there's a White House GitHub page. White House is doing official badges. How many folks do you 913.75s - 919.75s | have here? At least ten folks. That are all over. And when you do something like this in the 919.75s - 929.25s | White House, this starts to become a presidential record. You can't imagine. I talked briefly 929.25s - 935.47s | about the culture change that's ongoing in Washington. And it's required. The things that are 935.47s - 942.67s | happening around the world require us to evolve with them. There are revolutions. But I think 942.67s - 947.41s | human nature is only that we can evolve. But we have to try to keep pace. Culture change takes a 947.41s - 954.49s | while. The White House and other government institutions recognize that we need to be able to 954.49s - 960.13s | relate more broadly. And that's part of the culture change. We need to be able to trust more 960.13s - 966.85s | broadly.


chunk_id: 205_chunk_15
chunk_text:
been coming at 900.41s - 907.07s | that point to Black Hat for DEF CON for a couple of years. And they wouldn't let me. And now 907.07s - 913.75s | there's a White House GitHub page. White House is doing official badges. How many folks do you 913.75s - 919.75s | have here? At least ten folks. That are all over. And when you do something like this in the 919.75s - 929.25s | White House, this starts to become a presidential record. You can't imagine. I talked briefly 929.25s - 935.47s | about the culture change that's ongoing in Washington. And it's required. The things that are 935.47s - 942.67s | happening around the world require us to evolve with them. There are revolutions. But I think 942.67s - 947.41s | human nature is only that we can evolve. But we have to try to keep pace. Culture change takes a 947.41s - 954.49s | while. The White House and other government institutions recognize that we need to be able to 954.49s - 960.13s | relate more broadly. And that's part of the culture change. We need to be able to trust more 960.13s - 966.85s | broadly. That's part of the culture change. We need to be able to look at the community research 966.85s - 974.21s | effort and bring that in. To recognize that it's part of our team. It's always been a part of our 974.21s - 977.57s | team. But we have not always recognized it. That's part of that culture change. 977.57s - 983.45s | And I love it because it's so much deeper relationship now. On this stage, in this chair, Jen 983.45s - 987.09s | Easterly yesterday, I don't know how many saw Director Easterly. She was great. But she talked 987.09s - 993.97s | about when she was more junior and she was helping prepare Keith Alexander for when he was coming to 993.97s - 999.85s | Black Hat. And I know one of the leading hackers had brought eggs with him and was going to throw 999.89s - 1004.37s | eggs and ended up not. Because this was right after Snowden. Because it was a very fragile 1004.37s - 1009.61s | relationship then between the federal government and hackers. And now again, I remember one time I 1009.61s - 1014.73s | was in your office. I was in


chunk_id: 205_chunk_16
chunk_text:
That's part of the culture change. We need to be able to look at the community research 966.85s - 974.21s | effort and bring that in. To recognize that it's part of our team. It's always been a part of our 974.21s - 977.57s | team. But we have not always recognized it. That's part of that culture change. 977.57s - 983.45s | And I love it because it's so much deeper relationship now. On this stage, in this chair, Jen 983.45s - 987.09s | Easterly yesterday, I don't know how many saw Director Easterly. She was great. But she talked 987.09s - 993.97s | about when she was more junior and she was helping prepare Keith Alexander for when he was coming to 993.97s - 999.85s | Black Hat. And I know one of the leading hackers had brought eggs with him and was going to throw 999.89s - 1004.37s | eggs and ended up not. Because this was right after Snowden. Because it was a very fragile 1004.37s - 1009.61s | relationship then between the federal government and hackers. And now again, I remember one time I 1009.61s - 1014.73s | was in your office. I was in the White House compound. And I turned a corner and there were all 1014.73s - 1020.61s | these blue hairs. You had all of these hackers who were in their full blue haired regalia with 1020.61s - 1025.53s | their tattoos and their stickers. And they were just there to review the National Cyber Security 1025.53s - 1026.53s | Strategy and give their input. 1026.85s - 1032.73s | Yeah. And that's actually a part of a broader culture change. So excuse me for going off script. 1033.77s - 1040.45s | We need to get past how people look and how they act. If they're committed to getting things done. 1045.57s - 1050.37s | If they're committed to getting things done for the good of this nation, they ought to be on the 1050.37s - 1059.25s | team. And personally, I was challenged when a person I hold dearly came home with a Band-Aid over 1059.25s - 1065.49s | the eye. And I'm like, oh, what happened? And I bumped my head at school. I'm like, okay. Then I 1065.49s - 1072.85s | saw the prom picture. So there was an earring there. But I had to get over that. That


chunk_id: 205_chunk_17
chunk_text:
the White House compound. And I turned a corner and there were all 1014.73s - 1020.61s | these blue hairs. You had all of these hackers who were in their full blue haired regalia with 1020.61s - 1025.53s | their tattoos and their stickers. And they were just there to review the National Cyber Security 1025.53s - 1026.53s | Strategy and give their input. 1026.85s - 1032.73s | Yeah. And that's actually a part of a broader culture change. So excuse me for going off script. 1033.77s - 1040.45s | We need to get past how people look and how they act. If they're committed to getting things done. 1045.57s - 1050.37s | If they're committed to getting things done for the good of this nation, they ought to be on the 1050.37s - 1059.25s | team. And personally, I was challenged when a person I hold dearly came home with a Band-Aid over 1059.25s - 1065.49s | the eye. And I'm like, oh, what happened? And I bumped my head at school. I'm like, okay. Then I 1065.49s - 1072.85s | saw the prom picture. So there was an earring there. But I had to get over that. That was my 1072.85s - 1077.65s | issue. Not my loved one's issue. And that's just a personal anecdote. 1077.97s - 1079.93s | And it wasn't me, by the way, just to be clear. 1080.21s - 1085.41s | On getting past how people look, where they're from, how they talk. If we're committed to 1085.41s - 1088.97s | accomplishing the same outcomes, let's move out together. 1089.17s - 1092.81s | So let's actually get to one of the questions that I said I was going to ask. 1092.81s - 1093.53s | If you insist. 1093.57s - 1102.97s | Because we've had, you know, hackers in general, we hate these bullshit requirements. We hate 1102.97s - 1108.29s | these things that are put in the way. Because that's what the community is about, is saying, 1108.29s - 1113.01s | wait a minute, that's security theater. This is bullshit. Let's bypass these. And one of those 1113.01s - 1117.97s | that's held this community back, like, so much of what we have to do is positive action. But 1117.97s - 1123.49s | sometimes what we have to do is just remove the bullshit. And often we would have these 1123.53s - 1129.33s |


chunk_id: 205_chunk_18
chunk_text:
was my 1072.85s - 1077.65s | issue. Not my loved one's issue. And that's just a personal anecdote. 1077.97s - 1079.93s | And it wasn't me, by the way, just to be clear. 1080.21s - 1085.41s | On getting past how people look, where they're from, how they talk. If we're committed to 1085.41s - 1088.97s | accomplishing the same outcomes, let's move out together. 1089.17s - 1092.81s | So let's actually get to one of the questions that I said I was going to ask. 1092.81s - 1093.53s | If you insist. 1093.57s - 1102.97s | Because we've had, you know, hackers in general, we hate these bullshit requirements. We hate 1102.97s - 1108.29s | these things that are put in the way. Because that's what the community is about, is saying, 1108.29s - 1113.01s | wait a minute, that's security theater. This is bullshit. Let's bypass these. And one of those 1113.01s - 1117.97s | that's held this community back, like, so much of what we have to do is positive action. But 1117.97s - 1123.49s | sometimes what we have to do is just remove the bullshit. And often we would have these 1123.53s - 1129.33s | educational and other requirements for jobs that, and this is tough for me to say as a 1129.33s - 1137.41s | university professor, is we would have these requirements for degrees that just weren't 1137.41s - 1140.05s | necessary. And I think we've made a lot of progress, right? 1140.25s - 1149.05s | We have. But first off on the bullshit, throw a flag. If you see something that's not right, 1149.69s - 1157.85s | throw a flag. We have thick skin at ONCD. We know that no entity gets it right the first time, 1157.85s - 1166.73s | every time. So we want constructive feedback nonstop. So bring that on. We want to do that. 1167.89s - 1171.69s | Skills based hiring. It looks like we've been filling out a lot of requirements. 1171.77s - 1180.65s | Yeah. And I share your challenge on the four year degree requirement. One of the tangible 1180.89s - 1187.33s | outcomes that our office has been able to accomplish with our partners, and you'll hear me 1187.33s - 1193.49s | talk about with our partners a lot. Our office is about collaboration, leadership via 1193.49s - 1201.89s | collaboration. We stood up


chunk_id: 205_chunk_19
chunk_text:
educational and other requirements for jobs that, and this is tough for me to say as a 1129.33s - 1137.41s | university professor, is we would have these requirements for degrees that just weren't 1137.41s - 1140.05s | necessary. And I think we've made a lot of progress, right? 1140.25s - 1149.05s | We have. But first off on the bullshit, throw a flag. If you see something that's not right, 1149.69s - 1157.85s | throw a flag. We have thick skin at ONCD. We know that no entity gets it right the first time, 1157.85s - 1166.73s | every time. So we want constructive feedback nonstop. So bring that on. We want to do that. 1167.89s - 1171.69s | Skills based hiring. It looks like we've been filling out a lot of requirements. 1171.77s - 1180.65s | Yeah. And I share your challenge on the four year degree requirement. One of the tangible 1180.89s - 1187.33s | outcomes that our office has been able to accomplish with our partners, and you'll hear me 1187.33s - 1193.49s | talk about with our partners a lot. Our office is about collaboration, leadership via 1193.49s - 1201.89s | collaboration. We stood up to bring coherence to the federal cybersecurity ecosystem, not to be 1201.89s - 1207.73s | in charge, but to lead. And you don't need to be in charge to lead. So we are leading via 1207.73s - 1215.13s | collaboration. And one area with our partners is a skills based hiring approach. And we 1215.13s - 1222.97s | recognized that it had been emerging in the private sector and other functional areas. And 1223.01s - 1231.69s | given that there are roughly 500,000 open cyber jobs in this great nation, and that does not 1231.69s - 1240.81s | imply we're 500,000 people short in talent. We have the talent. It's not a talent issue. It's a 1240.81s - 1248.01s | recruiting issue. So we developed a national cyber workforce and education strategy to help 1248.33s - 1262.25s | address that $500,000 gap in open cyber positions. And one of the focuses is removing barriers to 1262.25s - 1270.61s | these good paying, purposeful cyber jobs. One of the barriers that we had seen is requirements for 1270.61s - 1277.93s | four year degrees. And I'd imagine that just about everybody in here knows folks that don't have 1277.93s - 1285.69s


chunk_id: 205_chunk_20
chunk_text:
to bring coherence to the federal cybersecurity ecosystem, not to be 1201.89s - 1207.73s | in charge, but to lead. And you don't need to be in charge to lead. So we are leading via 1207.73s - 1215.13s | collaboration. And one area with our partners is a skills based hiring approach. And we 1215.13s - 1222.97s | recognized that it had been emerging in the private sector and other functional areas. And 1223.01s - 1231.69s | given that there are roughly 500,000 open cyber jobs in this great nation, and that does not 1231.69s - 1240.81s | imply we're 500,000 people short in talent. We have the talent. It's not a talent issue. It's a 1240.81s - 1248.01s | recruiting issue. So we developed a national cyber workforce and education strategy to help 1248.33s - 1262.25s | address that $500,000 gap in open cyber positions. And one of the focuses is removing barriers to 1262.25s - 1270.61s | these good paying, purposeful cyber jobs. One of the barriers that we had seen is requirements for 1270.61s - 1277.93s | four year degrees. And I'd imagine that just about everybody in here knows folks that don't have 1277.93s - 1285.69s | four year degrees that are making substantial contributions to cybersecurity. Initially, when 1285.69s - 1292.41s | our team took that on, we thought that needed to change a law or needed to change a regulation. 1292.97s - 1299.25s | That's not the case. It was just a legacy bad practice. So the first step that our team has 1299.25s - 1306.93s | taken on in concert with the Office of Management and Budget, OMB and others, is to reach out to the 1306.93s - 1313.25s | departments and agencies, senior acquisition executives, to ensure that they know that they are 1313.25s - 1321.85s | not being held to account by the federal government on this four year college degree. If there is a 1321.85s - 1327.13s | requirement, it's a specific department and agency requirement, and it should not be there. Again, 1327.13s - 1333.57s | it's a legacy bad practice. So we're getting that word out on the federal contractor side. On the 1334.05s - 1339.37s | federal employee government civil servant side, we're working with our partners at the Office of 1339.37s - 1347.37s | Personnel Management, OPM, to do the same thing, to go towards skills


chunk_id: 205_chunk_21
chunk_text:
| four year degrees that are making substantial contributions to cybersecurity. Initially, when 1285.69s - 1292.41s | our team took that on, we thought that needed to change a law or needed to change a regulation. 1292.97s - 1299.25s | That's not the case. It was just a legacy bad practice. So the first step that our team has 1299.25s - 1306.93s | taken on in concert with the Office of Management and Budget, OMB and others, is to reach out to the 1306.93s - 1313.25s | departments and agencies, senior acquisition executives, to ensure that they know that they are 1313.25s - 1321.85s | not being held to account by the federal government on this four year college degree. If there is a 1321.85s - 1327.13s | requirement, it's a specific department and agency requirement, and it should not be there. Again, 1327.13s - 1333.57s | it's a legacy bad practice. So we're getting that word out on the federal contractor side. On the 1334.05s - 1339.37s | federal employee government civil servant side, we're working with our partners at the Office of 1339.37s - 1347.37s | Personnel Management, OPM, to do the same thing, to go towards skills based hiring. Why? Because 1347.37s - 1352.25s | it's not about the paper certification that we all frame and put up on our wall. It's about the 1352.25s - 1359.05s | knowledge that we have. It's about the skill set that we can apply to the mission set. And, you know, the 1359.05s - 1365.53s | example that's most near and dear to me, I spent several years at the National Security Agency, 1365.77s - 1374.09s | working shoulder to shoulder with our colleagues at the US Cyber Command. And many, many of the 1374.17s - 1381.93s | operators at NSA and Cyber Command are military members. And many of those military members do not 1381.93s - 1388.41s | have four year college degrees. But they all have the skill set necessary to make significant 1388.41s - 1394.37s | contributions to our nation's security in cyberspace. So we're working with OPM. They've taken on the 1394.37s - 1403.85s | task to be completed by June 2025, to transition the largest IT occupation in the federal 1403.85s - 1410.65s | government, the 2210 series to a skills based approach. And that's just the right thing to do. 1411.25s - 1416.01s |


chunk_id: 205_chunk_22
chunk_text:
based hiring. Why? Because 1347.37s - 1352.25s | it's not about the paper certification that we all frame and put up on our wall. It's about the 1352.25s - 1359.05s | knowledge that we have. It's about the skill set that we can apply to the mission set. And, you know, the 1359.05s - 1365.53s | example that's most near and dear to me, I spent several years at the National Security Agency, 1365.77s - 1374.09s | working shoulder to shoulder with our colleagues at the US Cyber Command. And many, many of the 1374.17s - 1381.93s | operators at NSA and Cyber Command are military members. And many of those military members do not 1381.93s - 1388.41s | have four year college degrees. But they all have the skill set necessary to make significant 1388.41s - 1394.37s | contributions to our nation's security in cyberspace. So we're working with OPM. They've taken on the 1394.37s - 1403.85s | task to be completed by June 2025, to transition the largest IT occupation in the federal 1403.85s - 1410.65s | government, the 2210 series to a skills based approach. And that's just the right thing to do. 1411.25s - 1416.01s | That's going to remove some barriers, that's going to close that gap. And it's going to make us safer. 1420.01s - 1428.25s | So especially for folks that don't necessarily know how DC works, right? I'll start with that would 1428.25s - 1435.13s | include me. Right, when Harry talked about workforce, right, the very first workforce 1435.13s - 1442.73s | recommendations came from the White House in 2000. So President Clinton's administration had come out 1442.73s - 1448.53s | with the first, it wasn't quite a strategy, but it was, it was an implementation. And they said, 1448.53s - 1455.97s | boy, we've got to solve this. Right. So it goes back to 2000. And it's not like DC was, the US 1455.97s - 1461.41s | government wasn't trying to do this. It's just that there are hard problems that needed longer 1461.41s - 1465.65s | than you could do in one administration and more than you could do. Because normally in the White 1465.65s - 1471.49s | House, like when I was there, we had maybe four or six people that were looking at cyberspace, 1471.49s - 1476.49s | especially on the defensive side. Right, even now out


chunk_id: 205_chunk_23
chunk_text:
That's going to remove some barriers, that's going to close that gap. And it's going to make us safer. 1420.01s - 1428.25s | So especially for folks that don't necessarily know how DC works, right? I'll start with that would 1428.25s - 1435.13s | include me. Right, when Harry talked about workforce, right, the very first workforce 1435.13s - 1442.73s | recommendations came from the White House in 2000. So President Clinton's administration had come out 1442.73s - 1448.53s | with the first, it wasn't quite a strategy, but it was, it was an implementation. And they said, 1448.53s - 1455.97s | boy, we've got to solve this. Right. So it goes back to 2000. And it's not like DC was, the US 1455.97s - 1461.41s | government wasn't trying to do this. It's just that there are hard problems that needed longer 1461.41s - 1465.65s | than you could do in one administration and more than you could do. Because normally in the White 1465.65s - 1471.49s | House, like when I was there, we had maybe four or six people that were looking at cyberspace, 1471.49s - 1476.49s | especially on the defensive side. Right, even now out of the National Security Council, there may be 1476.49s - 1484.29s | six or eight that are doing defense. And your team now is 85-ish, right? So now the National 1484.29s - 1488.61s | Cyber, the Office of the National Cyber Director can say, we're going to have a special team of a 1488.61s - 1492.65s | couple people led by an Assistant National Cyber Director to do workforce. And they're going to 1492.65s - 1499.49s | stay on the problem year after year and make sure we actually make a difference to stay with it. And 1499.49s - 1506.25s | because that's at the White House, oh, and some of her actually hired in as career civil servants 1506.25s - 1512.81s | as part of the White House, those jobs are on USA Jobs, go look for them, that they will be able to 1512.81s - 1517.01s | be there in between administrations. Because, because the director talked about hard problems. 1517.01s - 1522.25s | Now in your, so Workforce is One, you brought, you really featured open source and you just had 1522.25s - 1528.53s | this report came out this week, right? Yes, yesterday. Wow. Great. Yep.


chunk_id: 205_chunk_24
chunk_text:
of the National Security Council, there may be 1476.49s - 1484.29s | six or eight that are doing defense. And your team now is 85-ish, right? So now the National 1484.29s - 1488.61s | Cyber, the Office of the National Cyber Director can say, we're going to have a special team of a 1488.61s - 1492.65s | couple people led by an Assistant National Cyber Director to do workforce. And they're going to 1492.65s - 1499.49s | stay on the problem year after year and make sure we actually make a difference to stay with it. And 1499.49s - 1506.25s | because that's at the White House, oh, and some of her actually hired in as career civil servants 1506.25s - 1512.81s | as part of the White House, those jobs are on USA Jobs, go look for them, that they will be able to 1512.81s - 1517.01s | be there in between administrations. Because, because the director talked about hard problems. 1517.01s - 1522.25s | Now in your, so Workforce is One, you brought, you really featured open source and you just had 1522.25s - 1528.53s | this report came out this week, right? Yes, yesterday. Wow. Great. Yep. You let in with hard 1528.61s - 1534.49s | problems. And that's one of the things that the Office of National Cyber Director is known for, 1534.49s - 1541.89s | addressing the hard problems. And what's a hard problem? You mentioned workforce challenges were 1541.89s - 1546.45s | brought to the forefront during the administration of President Clinton, a couple decades ago, 1546.45s - 1551.97s | something like that. Years and years, problems lingering that have not been sufficiently 1551.97s - 1557.85s | addressed. Those are hard problems. That's what we like to take on. The easy stuff we leave to 1557.85s - 1562.37s | other entities, and that's fine. They're valued. But it's the hard problems that we take on. 1562.37s - 1569.01s | Several of those hard problems, yes, include open source software. How do we address the 1569.01s - 1576.81s | vulnerabilities? How do we value the folks that are keeping open source software as safe as they 1576.81s - 1584.81s | have done? The report talks to how some of our open source folks feel. I think the quote was 1585.29s - 1594.37s | unpaid hobbyists. Unpaid hobbyists. And that's accurate in many senses. But it's


chunk_id: 205_chunk_25
chunk_text:
You let in with hard 1528.61s - 1534.49s | problems. And that's one of the things that the Office of National Cyber Director is known for, 1534.49s - 1541.89s | addressing the hard problems. And what's a hard problem? You mentioned workforce challenges were 1541.89s - 1546.45s | brought to the forefront during the administration of President Clinton, a couple decades ago, 1546.45s - 1551.97s | something like that. Years and years, problems lingering that have not been sufficiently 1551.97s - 1557.85s | addressed. Those are hard problems. That's what we like to take on. The easy stuff we leave to 1557.85s - 1562.37s | other entities, and that's fine. They're valued. But it's the hard problems that we take on. 1562.37s - 1569.01s | Several of those hard problems, yes, include open source software. How do we address the 1569.01s - 1576.81s | vulnerabilities? How do we value the folks that are keeping open source software as safe as they 1576.81s - 1584.81s | have done? The report talks to how some of our open source folks feel. I think the quote was 1585.29s - 1594.37s | unpaid hobbyists. Unpaid hobbyists. And that's accurate in many senses. But it's not accurate 1594.37s - 1604.37s | when you couple unpaid with the impact that they have. We need to take a look at how to show how 1604.37s - 1609.53s | much we value those folks. We value them, but we don't show it the way we should. So we need to 1609.53s - 1616.49s | take advantage of that. I know earlier today we talked about the German tech fund that's in the 1616.49s - 1624.17s | report. That's an investment made by the German government on some of their software. And some 1624.17s - 1631.49s | of the recommendations into the RFI were for the U.S. federal government to make some 1631.49s - 1640.73s | investments in the open source software. You mentioned the RFI. So one of the ways the U.S. 1640.73s - 1645.13s | government works is by putting out, hey, we're thinking about making a new rule or we're 1645.13s - 1652.09s | looking for new information. So ONCD has done two or three at least. So they did one on, hey, 1652.09s - 1658.05s | what are your ideas in regulatory harmonization? That got maybe 85-ish responses. What are your 1658.05s - 1661.85s |


chunk_id: 205_chunk_26
chunk_text:
not accurate 1594.37s - 1604.37s | when you couple unpaid with the impact that they have. We need to take a look at how to show how 1604.37s - 1609.53s | much we value those folks. We value them, but we don't show it the way we should. So we need to 1609.53s - 1616.49s | take advantage of that. I know earlier today we talked about the German tech fund that's in the 1616.49s - 1624.17s | report. That's an investment made by the German government on some of their software. And some 1624.17s - 1631.49s | of the recommendations into the RFI were for the U.S. federal government to make some 1631.49s - 1640.73s | investments in the open source software. You mentioned the RFI. So one of the ways the U.S. 1640.73s - 1645.13s | government works is by putting out, hey, we're thinking about making a new rule or we're 1645.13s - 1652.09s | looking for new information. So ONCD has done two or three at least. So they did one on, hey, 1652.09s - 1658.05s | what are your ideas in regulatory harmonization? That got maybe 85-ish responses. What are your 1658.05s - 1661.85s | ideas on open source? So this came out, I think the responses were due in November. 1661.85s - 1665.53s | On open source, we actually announced that here last year. 1665.53s - 1665.89s | Oh, great. 1665.89s - 1673.53s | Yeah. And actually, that's why we came back to announce it. It's great to take all these actions. 1673.53s - 1680.57s | It's great to have RFIs to get input from the people who, frankly, may know more about these 1680.57s - 1686.85s | items than we do. But it's not great if we don't take it on board and follow up with action. So we 1686.85s - 1692.77s | have the summary reports and there will be a public and private sector working group that 1692.77s - 1699.05s | stands up later this year to take on those recommendations on how to better protect open 1699.05s - 1703.21s | source software and demonstrate how much we value that. 1703.21s - 1708.69s | Yeah, great. Just a quick question. How many folks here have ever responded to one of these RFIs or 1708.69s - 1715.17s | the like? So we've got a handful, but that's not a lot. So when


chunk_id: 205_chunk_27
chunk_text:
ideas on open source? So this came out, I think the responses were due in November. 1661.85s - 1665.53s | On open source, we actually announced that here last year. 1665.53s - 1665.89s | Oh, great. 1665.89s - 1673.53s | Yeah. And actually, that's why we came back to announce it. It's great to take all these actions. 1673.53s - 1680.57s | It's great to have RFIs to get input from the people who, frankly, may know more about these 1680.57s - 1686.85s | items than we do. But it's not great if we don't take it on board and follow up with action. So we 1686.85s - 1692.77s | have the summary reports and there will be a public and private sector working group that 1692.77s - 1699.05s | stands up later this year to take on those recommendations on how to better protect open 1699.05s - 1703.21s | source software and demonstrate how much we value that. 1703.21s - 1708.69s | Yeah, great. Just a quick question. How many folks here have ever responded to one of these RFIs or 1708.69s - 1715.17s | the like? So we've got a handful, but that's not a lot. So when you hear, if you say, man, the 1715.21s - 1721.61s | stuff that Washington, D.C. is bullshit, they always get it wrong. Look for those RFIs, right? 1721.61s - 1728.37s | Because that's the government. That's the White House going out and saying, what are we doing 1728.37s - 1736.05s | wrong? What can we do better? What are your ideas? And you can just submit, right? You don't have to 1736.05s - 1742.09s | be this tall to enter. You can submit your ideas directly on how we should be improving open 1742.13s - 1747.85s | source or regulatory harmonization or whatever the next one is going to be. Because now ONCD has 1747.85s - 1752.85s | made this a repeatable process. And I don't think NSC ever did this or OMB. I think this is very 1752.85s - 1754.69s | much an ONCD thing, right? 1754.69s - 1760.61s | Other agencies are doing it now and we are happy that they're doing it now. Again, the key is to 1760.61s - 1768.73s | make it meaningful. And I'll just speak frankly. I have heard, we have heard from our partners in 1768.73s - 1774.97s | the private sector


chunk_id: 205_chunk_28
chunk_text:
you hear, if you say, man, the 1715.21s - 1721.61s | stuff that Washington, D.C. is bullshit, they always get it wrong. Look for those RFIs, right? 1721.61s - 1728.37s | Because that's the government. That's the White House going out and saying, what are we doing 1728.37s - 1736.05s | wrong? What can we do better? What are your ideas? And you can just submit, right? You don't have to 1736.05s - 1742.09s | be this tall to enter. You can submit your ideas directly on how we should be improving open 1742.13s - 1747.85s | source or regulatory harmonization or whatever the next one is going to be. Because now ONCD has 1747.85s - 1752.85s | made this a repeatable process. And I don't think NSC ever did this or OMB. I think this is very 1752.85s - 1754.69s | much an ONCD thing, right? 1754.69s - 1760.61s | Other agencies are doing it now and we are happy that they're doing it now. Again, the key is to 1760.61s - 1768.73s | make it meaningful. And I'll just speak frankly. I have heard, we have heard from our partners in 1768.73s - 1774.97s | the private sector that if we don't act upon the feedback, then the opportunity to contribute to 1774.97s - 1781.45s | an RFI is not going to be nearly as meaningful. And to that end, Jay mentioned the RFI on 1781.61s - 1789.53s | regulatory harmonization. And we had a lot of feedback, a lot of valuable feedback. And it came 1789.77s - 1797.81s | in large part from 11 of the 16 critical infrastructure sectors. And that's great. But my 1797.81s - 1804.65s | concern is the other five critical infrastructure sectors did not submit input to that RFI. 1805.77s - 1809.85s | Just think about like critical infrastructure sectors, which are kind of by definition, 1809.85s - 1815.37s | critical to this country, did not submit on their thoughts. 1815.37s - 1818.49s | Yeah. And that's unfortunate. We're still reaching out to them. 1818.69s - 1820.33s | Judge, judge, judge. 1820.33s - 1824.89s | Yeah, we're still reaching out to them because we value their input. Maybe there's another means 1824.89s - 1831.21s | that's more convenient for them. So we're not giving up on them. But they passed on that 1831.21s - 1832.85s | opportunity, but we'll get with it.


chunk_id: 205_chunk_29
chunk_text:
that if we don't act upon the feedback, then the opportunity to contribute to 1774.97s - 1781.45s | an RFI is not going to be nearly as meaningful. And to that end, Jay mentioned the RFI on 1781.61s - 1789.53s | regulatory harmonization. And we had a lot of feedback, a lot of valuable feedback. And it came 1789.77s - 1797.81s | in large part from 11 of the 16 critical infrastructure sectors. And that's great. But my 1797.81s - 1804.65s | concern is the other five critical infrastructure sectors did not submit input to that RFI. 1805.77s - 1809.85s | Just think about like critical infrastructure sectors, which are kind of by definition, 1809.85s - 1815.37s | critical to this country, did not submit on their thoughts. 1815.37s - 1818.49s | Yeah. And that's unfortunate. We're still reaching out to them. 1818.69s - 1820.33s | Judge, judge, judge. 1820.33s - 1824.89s | Yeah, we're still reaching out to them because we value their input. Maybe there's another means 1824.89s - 1831.21s | that's more convenient for them. So we're not giving up on them. But they passed on that 1831.21s - 1832.85s | opportunity, but we'll get with it. 1833.53s - 1838.09s | So one of the ways that you can connect, one of the ways you can make policy better, hopefully we 1838.09s - 1843.37s | might have time to talk about some other ones. But be on the lookout for those RFIs. Even if your 1843.37s - 1848.61s | company is not going to let you submit, you can still submit just as an individual or grab a bunch 1848.61s - 1853.89s | of friends. Okay, other hard problems. Where else are we working? I heard you talk about routing, 1853.89s - 1858.73s | which we hardly ever talk about. So it was glad to hear you bring it up. 1858.81s - 1866.21s | Yes, our team is working again with our partners in the federal government to include CISA, NIST, 1866.37s - 1873.77s | the NSA, and plenty of others on securing the internet. As you all know, internet was created 1873.77s - 1881.53s | decades ago, not envisioned to be what it is today, critical to the way each and every one of us and 1881.53s - 1887.21s | our loved ones live. It was not envisioned to be that, but that's where we are


chunk_id: 205_chunk_30
chunk_text:
1833.53s - 1838.09s | So one of the ways that you can connect, one of the ways you can make policy better, hopefully we 1838.09s - 1843.37s | might have time to talk about some other ones. But be on the lookout for those RFIs. Even if your 1843.37s - 1848.61s | company is not going to let you submit, you can still submit just as an individual or grab a bunch 1848.61s - 1853.89s | of friends. Okay, other hard problems. Where else are we working? I heard you talk about routing, 1853.89s - 1858.73s | which we hardly ever talk about. So it was glad to hear you bring it up. 1858.81s - 1866.21s | Yes, our team is working again with our partners in the federal government to include CISA, NIST, 1866.37s - 1873.77s | the NSA, and plenty of others on securing the internet. As you all know, internet was created 1873.77s - 1881.53s | decades ago, not envisioned to be what it is today, critical to the way each and every one of us and 1881.53s - 1887.21s | our loved ones live. It was not envisioned to be that, but that's where we are right now. It was 1887.21s - 1895.93s | not built to be as secure and safe and reliable as we need it to be. And as a former program 1895.93s - 1903.09s | manager, I know how difficult it is to bolt these things on after the product has already been 1903.09s - 1908.17s | built. Nevertheless, that's not enough reason to not take it on. So our team, again, working with 1908.17s - 1914.85s | our federal partners, is looking at border gateway protocol, the means of transferring bulk 1914.85s - 1924.73s | internet data, and how to secure that. What we are working on is a recommendation for RPKI as a 1924.77s - 1932.73s | solution to that. And we realize that RPKI is not going to solve all of the problems on that border 1932.73s - 1941.25s | gateway protocol. But we also realize need to start somewhere, sometime. And RPKI is a great place to 1941.25s - 1950.37s | start. And we're still seeking input on how to address those challenges in BGP. And that's one of 1950.37s - 1957.97s | the reasons we're here to seek you all's input on BGP. And again, another hard


chunk_id: 205_chunk_31
chunk_text:
right now. It was 1887.21s - 1895.93s | not built to be as secure and safe and reliable as we need it to be. And as a former program 1895.93s - 1903.09s | manager, I know how difficult it is to bolt these things on after the product has already been 1903.09s - 1908.17s | built. Nevertheless, that's not enough reason to not take it on. So our team, again, working with 1908.17s - 1914.85s | our federal partners, is looking at border gateway protocol, the means of transferring bulk 1914.85s - 1924.73s | internet data, and how to secure that. What we are working on is a recommendation for RPKI as a 1924.77s - 1932.73s | solution to that. And we realize that RPKI is not going to solve all of the problems on that border 1932.73s - 1941.25s | gateway protocol. But we also realize need to start somewhere, sometime. And RPKI is a great place to 1941.25s - 1950.37s | start. And we're still seeking input on how to address those challenges in BGP. And that's one of 1950.37s - 1957.97s | the reasons we're here to seek you all's input on BGP. And again, another hard problem. It's been 1957.97s - 1964.93s | around for years and years and years. We have known that the internet is not secure. But we 1964.93s - 1972.01s | twiddled our thumbs and said it's not secure. And we have not taken secure action, sufficient 1972.01s - 1974.01s | action. But we're doing that now. 1974.01s - 1980.53s | Yeah. That's great. And two quick notes. So you said secure by design, we've known for a while. We 1980.53s - 1987.77s | have actually known for almost 52 years. So hey, I'm a college professor by day. And so I've got 1987.77s - 1995.73s | time to look at this. October 1972, the Anderson report came out and said security cannot be 1995.73s - 2002.25s | included by retrofit. It has to be included by part of the design. So since 1972, we've known 2002.25s - 2007.41s | that. The same report said basically the red team always gets through. Meaning the offense has the 2007.41s - 2012.49s | advantage. The attackers are able to get through. So remember I talked about that miracle? We're 2012.49s - 2018.61s | 50 years into this. Our grandparents had these problems. Unless we


chunk_id: 205_chunk_32
chunk_text:
problem. It's been 1957.97s - 1964.93s | around for years and years and years. We have known that the internet is not secure. But we 1964.93s - 1972.01s | twiddled our thumbs and said it's not secure. And we have not taken secure action, sufficient 1972.01s - 1974.01s | action. But we're doing that now. 1974.01s - 1980.53s | Yeah. That's great. And two quick notes. So you said secure by design, we've known for a while. We 1980.53s - 1987.77s | have actually known for almost 52 years. So hey, I'm a college professor by day. And so I've got 1987.77s - 1995.73s | time to look at this. October 1972, the Anderson report came out and said security cannot be 1995.73s - 2002.25s | included by retrofit. It has to be included by part of the design. So since 1972, we've known 2002.25s - 2007.41s | that. The same report said basically the red team always gets through. Meaning the offense has the 2007.41s - 2012.49s | advantage. The attackers are able to get through. So remember I talked about that miracle? We're 2012.49s - 2018.61s | 50 years into this. Our grandparents had these problems. Unless we can really tackle these hard 2018.61s - 2024.05s | problems, our grandkids are going to be suffering through the same stuff as we are. And that's kind 2024.05s - 2028.13s | of depressing, right? To think that they're like our grandkids are going daddy, daddy, we had a 2028.13s - 2029.13s | DNS issue today. 2029.13s - 2037.73s | But that's our reality. And that should be our impetus for action. And you talk about these 2037.73s - 2044.65s | decades old problems. Another one is memory safe programming, or not memory safe programming 2044.65s - 2053.45s | languages. We've known it for years and years. But we have been slow to address it. And when I read 2053.49s - 2058.21s | our report that was released earlier this year, building blocks, please take a look at it, 2058.49s - 2064.65s | critique it, and let us know what you think. I was surprised to learn that that problem has been 2064.65s - 2071.57s | around for so long. And then I was surprised to learn that the software developers, the community 2071.57s - 2077.97s | itself, knew about the problem and had been advocating us to make that transition.


chunk_id: 205_chunk_33
chunk_text:
can really tackle these hard 2018.61s - 2024.05s | problems, our grandkids are going to be suffering through the same stuff as we are. And that's kind 2024.05s - 2028.13s | of depressing, right? To think that they're like our grandkids are going daddy, daddy, we had a 2028.13s - 2029.13s | DNS issue today. 2029.13s - 2037.73s | But that's our reality. And that should be our impetus for action. And you talk about these 2037.73s - 2044.65s | decades old problems. Another one is memory safe programming, or not memory safe programming 2044.65s - 2053.45s | languages. We've known it for years and years. But we have been slow to address it. And when I read 2053.49s - 2058.21s | our report that was released earlier this year, building blocks, please take a look at it, 2058.49s - 2064.65s | critique it, and let us know what you think. I was surprised to learn that that problem has been 2064.65s - 2071.57s | around for so long. And then I was surprised to learn that the software developers, the community 2071.57s - 2077.97s | itself, knew about the problem and had been advocating us to make that transition. But for 2077.97s - 2083.37s | whatever reason, and I'm not into blame, I'm into fixing things. But whatever reason, we didn't 2083.37s - 2091.45s | take action on that. We're trying to do that now. Along those lines, college professor, we need 2092.41s - 2098.01s | memory safe programming languages to be taught in colleges and high schools and trade schools and 2098.01s - 2105.65s | elsewhere. And I was at, I'll say, a service academy, not yours or mine. Earlier this year, 2106.57s - 2114.01s | talking to a young person about that building blocks report, and I asked the individual if they 2114.01s - 2121.53s | had read that report. And they had not. So I gave a high level, non-technical synopsis of the 2121.53s - 2126.41s | report, saying, you know, we need to go to memory safe programming languages. Here are some 2126.41s - 2131.77s | recommendations. Here are examples of non-memory safe programming languages. And when I ran down 2131.77s - 2137.29s | the list of non-memory safe programming languages, that individual said, oh, but they're so 2137.29s - 2144.25s | convenient. And I said, exactly. That's the challenge. Can't always choose convenience over


chunk_id: 205_chunk_34
chunk_text:
But for 2077.97s - 2083.37s | whatever reason, and I'm not into blame, I'm into fixing things. But whatever reason, we didn't 2083.37s - 2091.45s | take action on that. We're trying to do that now. Along those lines, college professor, we need 2092.41s - 2098.01s | memory safe programming languages to be taught in colleges and high schools and trade schools and 2098.01s - 2105.65s | elsewhere. And I was at, I'll say, a service academy, not yours or mine. Earlier this year, 2106.57s - 2114.01s | talking to a young person about that building blocks report, and I asked the individual if they 2114.01s - 2121.53s | had read that report. And they had not. So I gave a high level, non-technical synopsis of the 2121.53s - 2126.41s | report, saying, you know, we need to go to memory safe programming languages. Here are some 2126.41s - 2131.77s | recommendations. Here are examples of non-memory safe programming languages. And when I ran down 2131.77s - 2137.29s | the list of non-memory safe programming languages, that individual said, oh, but they're so 2137.29s - 2144.25s | convenient. And I said, exactly. That's the challenge. Can't always choose convenience over 2144.25s - 2149.85s | safety and security and reliability. Then I asked the individual, well, when you do graduate and get 2149.85s - 2158.17s | your commission, what warfare specialty will you go into? And the response was cyber. And I said, 2158.17s - 2162.41s | well, in a few years, you'll understand better. And that individual will. 2162.97s - 2168.89s | I mean, it was a quote that I first heard from Dan Geer probably in 2001 or 2002, the enemy of 2168.89s - 2180.12s | security isn't insecurity, it's convenience. And Dan was so right in so much. So some of my 2180.12s - 2190.12s | friends who run CornCon in Iowa, they had a project of looking at, we want to look at the text 2190.12s - 2196.36s | books to see if they're actually teaching good coding procedures. Like, not are we including 2196.36s - 2202.76s | cyber security in computer science programs, but are we teaching crap in computer science, like, 2202.76s - 2208.36s | out of date stuff in the programs. And it seems like, you know, I mean, degrees are important. 2208.36s - 2213.88s | That's a lot of the ways that many


chunk_id: 205_chunk_35
chunk_text:
2144.25s - 2149.85s | safety and security and reliability. Then I asked the individual, well, when you do graduate and get 2149.85s - 2158.17s | your commission, what warfare specialty will you go into? And the response was cyber. And I said, 2158.17s - 2162.41s | well, in a few years, you'll understand better. And that individual will. 2162.97s - 2168.89s | I mean, it was a quote that I first heard from Dan Geer probably in 2001 or 2002, the enemy of 2168.89s - 2180.12s | security isn't insecurity, it's convenience. And Dan was so right in so much. So some of my 2180.12s - 2190.12s | friends who run CornCon in Iowa, they had a project of looking at, we want to look at the text 2190.12s - 2196.36s | books to see if they're actually teaching good coding procedures. Like, not are we including 2196.36s - 2202.76s | cyber security in computer science programs, but are we teaching crap in computer science, like, 2202.76s - 2208.36s | out of date stuff in the programs. And it seems like, you know, I mean, degrees are important. 2208.36s - 2213.88s | That's a lot of the ways that many of us do get in. And I just wanted to raise that because it 2213.88s - 2220.36s | struck me as an important idea. Yes. Just yesterday, we visited the College of Southern 2220.36s - 2227.80s | Nevada. And in our student roundtable, one of the students mentioned and several of the students 2228.68s - 2236.04s | endorsed that student's perspective that the textbooks that they're using need to be more 2236.04s - 2245.00s | current. And that's valid. That's a challenge. Our field is evolving so rapidly. But we need to 2245.00s - 2250.36s | figure out how to at least keep pace. It'd be better if we stayed ahead. But we need to figure 2250.36s - 2257.88s | out how to keep pace with that. By the way, I saw you dancing on the side of the stage. 2257.88s - 2258.68s | Yes, sir. 2258.68s - 2261.00s | Are you tracking the Olympics break dance competition? 2261.08s - 2265.80s | My gosh, it's great. Yeah. All right. Go Team America, for those of you from America. If not, 2265.80s - 2271.48s | go whatever your country is. It's just amazing. Especially because it's so, right, especially as 2273.48s


chunk_id: 205_chunk_36
chunk_text:
of us do get in. And I just wanted to raise that because it 2213.88s - 2220.36s | struck me as an important idea. Yes. Just yesterday, we visited the College of Southern 2220.36s - 2227.80s | Nevada. And in our student roundtable, one of the students mentioned and several of the students 2228.68s - 2236.04s | endorsed that student's perspective that the textbooks that they're using need to be more 2236.04s - 2245.00s | current. And that's valid. That's a challenge. Our field is evolving so rapidly. But we need to 2245.00s - 2250.36s | figure out how to at least keep pace. It'd be better if we stayed ahead. But we need to figure 2250.36s - 2257.88s | out how to keep pace with that. By the way, I saw you dancing on the side of the stage. 2257.88s - 2258.68s | Yes, sir. 2258.68s - 2261.00s | Are you tracking the Olympics break dance competition? 2261.08s - 2265.80s | My gosh, it's great. Yeah. All right. Go Team America, for those of you from America. If not, 2265.80s - 2271.48s | go whatever your country is. It's just amazing. Especially because it's so, right, especially as 2273.48s - 2279.00s | computer security professionals, it's really easy to get pessimistic about stuff, right? Every year 2279.00s - 2284.12s | things seem to kind of get worse. And it's nice. And it seems like everybody hates each other a 2284.12s - 2287.96s | little more each year. So I'm glad you brought it up because it is great to see what all the 2287.96s - 2293.48s | athletes are doing, especially when we're putting together. But I didn't make the team this year. 2293.48s - 2299.56s | And it goes back. Had I not been here, I'd have been in Paris competing. But that does go back 2299.56s - 2305.56s | to our earlier conversation on cultural change. Plenty of people don't think that's a sport, 2305.56s - 2309.96s | shouldn't be an Olympic sport, shouldn't have a gold medal. Usually they have great 2309.96s - 2314.04s | beards like me and you. But we need to evolve with our people. 2314.52s - 2319.88s | All right. So as we start closing out, there's going to be two questions. And one is, 2322.04s - 2327.00s | we've talked about some ways people can get involved. The RFIs come out,


chunk_id: 205_chunk_37
chunk_text:
- 2279.00s | computer security professionals, it's really easy to get pessimistic about stuff, right? Every year 2279.00s - 2284.12s | things seem to kind of get worse. And it's nice. And it seems like everybody hates each other a 2284.12s - 2287.96s | little more each year. So I'm glad you brought it up because it is great to see what all the 2287.96s - 2293.48s | athletes are doing, especially when we're putting together. But I didn't make the team this year. 2293.48s - 2299.56s | And it goes back. Had I not been here, I'd have been in Paris competing. But that does go back 2299.56s - 2305.56s | to our earlier conversation on cultural change. Plenty of people don't think that's a sport, 2305.56s - 2309.96s | shouldn't be an Olympic sport, shouldn't have a gold medal. Usually they have great 2309.96s - 2314.04s | beards like me and you. But we need to evolve with our people. 2314.52s - 2319.88s | All right. So as we start closing out, there's going to be two questions. And one is, 2322.04s - 2327.00s | we've talked about some ways people can get involved. The RFIs come out, you can apply to 2327.00s - 2331.56s | the RFIs, right? The jobs at White House, right? You can go and you can apply to a job at the White 2331.56s - 2338.84s | House. And like, they're amazing. So I've got a couple ideas. I'd love to hear your ideas on how 2338.84s - 2344.52s | this community in particular can get involved to help unfuck policy in Washington, D.C. 2344.52s - 2355.00s | Yeah. I'm big on mentoring and sponsoring. And we've been on a tour of colleges around the 2355.00s - 2361.48s | country. And what a consistent theme that we've heard from the students is they want to learn 2361.48s - 2371.08s | more from experienced people. I think there's opportunities for all of us to mentor. I almost 2371.08s - 2377.16s | said these young people. But fortunately, there are some not so young people also changing their 2377.16s - 2384.52s | career focus into cybersecurity. So there's opportunities there. We are partnering again 2384.52s - 2391.40s | with our federal department and agency colleagues on hiring sprints across the country. If you 2391.40s - 2398.76s | all are hiring, let us know. If you


chunk_id: 205_chunk_38
chunk_text:
you can apply to 2327.00s - 2331.56s | the RFIs, right? The jobs at White House, right? You can go and you can apply to a job at the White 2331.56s - 2338.84s | House. And like, they're amazing. So I've got a couple ideas. I'd love to hear your ideas on how 2338.84s - 2344.52s | this community in particular can get involved to help unfuck policy in Washington, D.C. 2344.52s - 2355.00s | Yeah. I'm big on mentoring and sponsoring. And we've been on a tour of colleges around the 2355.00s - 2361.48s | country. And what a consistent theme that we've heard from the students is they want to learn 2361.48s - 2371.08s | more from experienced people. I think there's opportunities for all of us to mentor. I almost 2371.08s - 2377.16s | said these young people. But fortunately, there are some not so young people also changing their 2377.16s - 2384.52s | career focus into cybersecurity. So there's opportunities there. We are partnering again 2384.52s - 2391.40s | with our federal department and agency colleagues on hiring sprints across the country. If you 2391.40s - 2398.76s | all are hiring, let us know. If you know folks looking for jobs, send them in the direction of 2398.76s - 2404.20s | those hiring sprints. There are plenty of opportunities. And again, when you look at 2404.20s - 2412.36s | 500,000 open jobs, we need to do that. I want to call out a couple of folks here. 2412.36s - 2416.44s | Do we have any folks that teach cybersecurity? Please clap. All right. Yeah. Hands up. All right. 2416.44s - 2424.36s | For those that teach. Any teach at the high school level or below? Good. Only a couple, right? 2426.04s - 2431.72s | Volunteering at the schools. Doing what you can. Seeing if you can put, right, I was just talking 2431.72s - 2438.12s | to a colleague at dinner the other day that was at Montana. Was it Montana State? And they didn't 2438.12s - 2443.64s | have cybersecurity. And he said, let's do this. And they just got $14 million grants and now 2443.64s - 2449.72s | they're plugging ahead, right? There's room for volunteering and to get things done. So please 2449.72s - 2455.16s | get out and engage on that and mentoring the rest. I mentioned Tech Congress has amazing fellowships


chunk_id: 205_chunk_39
chunk_text:
know folks looking for jobs, send them in the direction of 2398.76s - 2404.20s | those hiring sprints. There are plenty of opportunities. And again, when you look at 2404.20s - 2412.36s | 500,000 open jobs, we need to do that. I want to call out a couple of folks here. 2412.36s - 2416.44s | Do we have any folks that teach cybersecurity? Please clap. All right. Yeah. Hands up. All right. 2416.44s - 2424.36s | For those that teach. Any teach at the high school level or below? Good. Only a couple, right? 2426.04s - 2431.72s | Volunteering at the schools. Doing what you can. Seeing if you can put, right, I was just talking 2431.72s - 2438.12s | to a colleague at dinner the other day that was at Montana. Was it Montana State? And they didn't 2438.12s - 2443.64s | have cybersecurity. And he said, let's do this. And they just got $14 million grants and now 2443.64s - 2449.72s | they're plugging ahead, right? There's room for volunteering and to get things done. So please 2449.72s - 2455.16s | get out and engage on that and mentoring the rest. I mentioned Tech Congress has amazing fellowships 2455.16s - 2459.88s | to help those on Congress to get better. Hackers on the Hill, if you're ever in D.C., they have 2459.88s - 2465.96s | got great projects. And the Policy Village here, it's incredible stuff. It is. And we need to 2465.96s - 2470.68s | increase it. Again, we need to take those numbers down to something more reasonable. 2471.48s - 2475.64s | You know, again, back to the National Cyber Workforce and Education Strategy, 2476.44s - 2483.32s | create multiple pathways and remove obstacles. One of the focuses there is we need to 2484.68s - 2493.08s | do better in recruiting. You and I talked earlier about the numbers male versus female. 2494.04s - 2503.00s | And how to encourage more participation from girls and ladies in cybersecurity. 2504.44s - 2510.44s | We were pleased yesterday at the College of Southern Nevada and UNLV. They both have women 2510.44s - 2518.04s | in cyber clubs. And to my delight, they said the numbers were increasing. The productivity 2518.04s - 2526.20s | was increasing. And that's a good thing. We need to make opportunities available to every American, 2526.20s - 2533.24s | to every community across this


chunk_id: 205_chunk_40
chunk_text:
2455.16s - 2459.88s | to help those on Congress to get better. Hackers on the Hill, if you're ever in D.C., they have 2459.88s - 2465.96s | got great projects. And the Policy Village here, it's incredible stuff. It is. And we need to 2465.96s - 2470.68s | increase it. Again, we need to take those numbers down to something more reasonable. 2471.48s - 2475.64s | You know, again, back to the National Cyber Workforce and Education Strategy, 2476.44s - 2483.32s | create multiple pathways and remove obstacles. One of the focuses there is we need to 2484.68s - 2493.08s | do better in recruiting. You and I talked earlier about the numbers male versus female. 2494.04s - 2503.00s | And how to encourage more participation from girls and ladies in cybersecurity. 2504.44s - 2510.44s | We were pleased yesterday at the College of Southern Nevada and UNLV. They both have women 2510.44s - 2518.04s | in cyber clubs. And to my delight, they said the numbers were increasing. The productivity 2518.04s - 2526.20s | was increasing. And that's a good thing. We need to make opportunities available to every American, 2526.20s - 2533.24s | to every community across this country. A lot of that is exposing them to the opportunities. 2533.24s - 2537.96s | Oftentimes, people just don't know about cybersecurity and the good paying jobs, 2537.96s - 2543.72s | the meaningful careers, a way to help protect themselves, the nation and their loved ones. 2543.96s - 2549.96s | One other way I'll say you can participate, run for office. You'll see Andrew running around with 2549.96s - 2556.44s | elect more hackers. However, we just need you. If you think you can do better than those bozos, 2557.88s - 2562.44s | let's see you in there. And I'm serious. Through DEF CON over the last ten years, 2562.44s - 2565.48s | we've had a lot of great elected officials who were smart about 2565.48s - 2569.00s | computer security. But a lot of times they only learned about it once they were in office. 2569.08s - 2573.96s | And so we can do better. Okay. Closing out our last couple of sips, last question, 2574.60s - 2586.14s | favorite hacker movie or literature and why? The Oceans series was good for me 2587.18s - 2596.70s | because it incorporated cyber into the team. And when I look back


chunk_id: 205_chunk_41
chunk_text:
country. A lot of that is exposing them to the opportunities. 2533.24s - 2537.96s | Oftentimes, people just don't know about cybersecurity and the good paying jobs, 2537.96s - 2543.72s | the meaningful careers, a way to help protect themselves, the nation and their loved ones. 2543.96s - 2549.96s | One other way I'll say you can participate, run for office. You'll see Andrew running around with 2549.96s - 2556.44s | elect more hackers. However, we just need you. If you think you can do better than those bozos, 2557.88s - 2562.44s | let's see you in there. And I'm serious. Through DEF CON over the last ten years, 2562.44s - 2565.48s | we've had a lot of great elected officials who were smart about 2565.48s - 2569.00s | computer security. But a lot of times they only learned about it once they were in office. 2569.08s - 2573.96s | And so we can do better. Okay. Closing out our last couple of sips, last question, 2574.60s - 2586.14s | favorite hacker movie or literature and why? The Oceans series was good for me 2587.18s - 2596.70s | because it incorporated cyber into the team. And when I look back on my military experience 2597.18s - 2604.38s | and my operational experience in the intelligence community, we did not always incorporate cyber 2604.38s - 2611.58s | early on in our missions. And we would have been better served had we done that. So Oceans 2611.58s - 2619.34s | was a great example of that. And along those lines, when we talk to folks about the importance 2619.42s - 2627.18s | of cyber, every now and then, too often, we'll hear entities, individuals and collectives talk 2627.18s - 2637.74s | about cyber being an inconvenience. That's just so wrong. Today and tomorrow and all the tomorrows 2637.74s - 2644.86s | that come after that, cyber is an imperative, not an inconvenience. And so Oceans got me focused on 2644.86s - 2651.82s | that and I was pleased that they incorporated cyber into their missions. Great movies. All right. 2651.82s - 2655.98s | So we're going to leave with that, right? Because worrying about this and taking care of it is an 2655.98s - 2661.66s | imperative because we have been bequeathed a miracle, right? To finish off with how Harry 2661.66s - 2667.82s | started off, right? I always capitalize internet


chunk_id: 205_chunk_42
chunk_text:
on my military experience 2597.18s - 2604.38s | and my operational experience in the intelligence community, we did not always incorporate cyber 2604.38s - 2611.58s | early on in our missions. And we would have been better served had we done that. So Oceans 2611.58s - 2619.34s | was a great example of that. And along those lines, when we talk to folks about the importance 2619.42s - 2627.18s | of cyber, every now and then, too often, we'll hear entities, individuals and collectives talk 2627.18s - 2637.74s | about cyber being an inconvenience. That's just so wrong. Today and tomorrow and all the tomorrows 2637.74s - 2644.86s | that come after that, cyber is an imperative, not an inconvenience. And so Oceans got me focused on 2644.86s - 2651.82s | that and I was pleased that they incorporated cyber into their missions. Great movies. All right. 2651.82s - 2655.98s | So we're going to leave with that, right? Because worrying about this and taking care of it is an 2655.98s - 2661.66s | imperative because we have been bequeathed a miracle, right? To finish off with how Harry 2661.66s - 2667.82s | started off, right? I always capitalize internet because to me it is a precious thing and we're 2667.82s - 2673.58s | going to screw it up like we screw up everything else, like the air, land, sea, if we don't take 2673.58s - 2679.02s | care of it. And so I always capitalize internet just to remind ourselves, we might not want to 2679.02s - 2685.66s | do that, that this is only going to survive. Our grandkids are only going to have something as good 2685.66s - 2691.58s | as we have now if we fight to keep it so. So thank you. Keep the fight alive and have a great rest 2691.58s - 2693.58s | of your DEF CON. Thank you, Harry Coker.


chunk_id: 205_chunk_43
chunk_text:
because to me it is a precious thing and we're 2667.82s - 2673.58s | going to screw it up like we screw up everything else, like the air, land, sea, if we don't take 2673.58s - 2679.02s | care of it. And so I always capitalize internet just to remind ourselves, we might not want to 2679.02s - 2685.66s | do that, that this is only going to survive. Our grandkids are only going to have something as good 2685.66s - 2691.58s | as we have now if we fight to keep it so. So thank you. Keep the fight alive and have a great rest 2691.58s - 2693.58s | of your DEF CON. Thank you, Harry Coker.


chunk_id: 206_chunk_0
chunk_text:
{ "webpage_url": "https://www.youtube.com/watch?v=EvbNQnZlPJg", "title": "DEF CON 32 - Hi-Intensity Deconstruction: Chronicles of a Cryptographic Heist - Javadi, Levy, Draffe", "description": "Introduced in 2011, HID Global\u2019s iCLASS SE solution is one of the world\u2019s most widely-deployed Electronic Physical Access Control platforms. HID's iCLASS SE Readers are ubiquitous in electronic physical access control and used in most government agencies and Fortune 500 companies. The readers can be easily seen and identified in almost every form of mainstream media. Almost 13 years after iCLASS SE\u2019s introduction, ground-breaking research and technical exploits will be disclosed publicly for the first time.\n\nIn this talk, we detail the process by which we reverse engineered the complex hardware and software chain of trust securing HID\u2019s iCLASS SE platform.\n\nOver a seven-year research period, we analyzed hardware, firmware, and software elements the ecosystem, uncovering an unfortunate series of pitfalls and implementation defects. These flaws culminated in an attack chain that allowed for the recovery of sensitive cryptographic key material from secure elements, which have received CC EAL 5+ accreditation. This chain resulted in revealing some cryptographic keys to the kingdom.\n\nFinally, we provide comprehensive guidance on technical and operational mitigations for end customers to identify practical risks and reduce impact.", "channel_url": "https://www.youtube.com/channel/UC6Om9kAkl32dWlDSNlDS9Iw", "duration": 4606, "channel": "DEFCONConference", "uploader": "DEFCONConference", "upload_date": "20241016" } 0.00s - 5.30s | This text was transcribed using whisper model: large-v2 One second here, we'll go ahead and get us kicked off. 5.30s - 12.62s | All right, how's everyone doing? 12.62s - 14.14s | Well, I think we got here safely. 14.14s - 19.75s | We can take these off for the moment, yep. 19.75s - 22.03s | So thank you guys for coming. 22.03s - 24.31s | This has been a long time coming. 24.31s - 27.31s | This is a super exciting topic for us, 27.31s - 29.39s | and we're really passionate about it. 29.39s - 31.79s | We've worked really hard to try to provide you 31.79s - 34.59s | all the necessary context you need to understand 34.59s - 36.95s | what happened and what the implications are. 36.99s - 38.95s | And we're going to do our best to kind of take you 38.95s - 40.71s | along the journey as best as possible. 40.71s - 42.07s | So thank you for being here, 42.07s - 44.83s | and thank you for your patience in advance. 44.83s - 47.31s | But first,


chunk_id: 206_chunk_1
chunk_text:
"https://www.youtube.com/channel/UC6Om9kAkl32dWlDSNlDS9Iw", "duration": 4606, "channel": "DEFCONConference", "uploader": "DEFCONConference", "upload_date": "20241016" } 0.00s - 5.30s | This text was transcribed using whisper model: large-v2 One second here, we'll go ahead and get us kicked off. 5.30s - 12.62s | All right, how's everyone doing? 12.62s - 14.14s | Well, I think we got here safely. 14.14s - 19.75s | We can take these off for the moment, yep. 19.75s - 22.03s | So thank you guys for coming. 22.03s - 24.31s | This has been a long time coming. 24.31s - 27.31s | This is a super exciting topic for us, 27.31s - 29.39s | and we're really passionate about it. 29.39s - 31.79s | We've worked really hard to try to provide you 31.79s - 34.59s | all the necessary context you need to understand 34.59s - 36.95s | what happened and what the implications are. 36.99s - 38.95s | And we're going to do our best to kind of take you 38.95s - 40.71s | along the journey as best as possible. 40.71s - 42.07s | So thank you for being here, 42.07s - 44.83s | and thank you for your patience in advance. 44.83s - 47.31s | But first, I really want to introduce 47.31s - 48.73s | some of the other researchers. 48.73s - 50.73s | First and foremost, Aaron. 54.69s - 57.65s | This is not an overstatement. 57.65s - 61.25s | If it was not for Aaron, I would not be standing here. 61.25s - 64.03s | I don't know if much of this work had have gotten done. 64.03s - 66.45s | He was absolutely the tip of the spear, 66.45s - 68.09s | and I can't say enough good things about him. 68.45s - 70.33s | He is one of the most talented and kindest researchers 70.33s - 77.33s | I've ever worked with, so yeah, thank you. 77.33s - 79.85s | Thank you so much, Bhavik, for the kind words. 79.85s - 82.29s | So I want to introduce Nick Draphin, 82.29s - 85.05s | who is one of the most talented security engineers, 85.05s - 87.29s | security researchers I have ever worked with. 88.41s - 90.33s | He accomplishes so much stuff, 90.33s - 94.09s | he works on so much stuff beyond all of this. 94.09s - 99.10s | Yeah, he's just incredible, he's amazing. 99.10s - 100.96s | Thanks,


chunk_id: 206_chunk_2
chunk_text:
I really want to introduce 47.31s - 48.73s | some of the other researchers. 48.73s - 50.73s | First and foremost, Aaron. 54.69s - 57.65s | This is not an overstatement. 57.65s - 61.25s | If it was not for Aaron, I would not be standing here. 61.25s - 64.03s | I don't know if much of this work had have gotten done. 64.03s - 66.45s | He was absolutely the tip of the spear, 66.45s - 68.09s | and I can't say enough good things about him. 68.45s - 70.33s | He is one of the most talented and kindest researchers 70.33s - 77.33s | I've ever worked with, so yeah, thank you. 77.33s - 79.85s | Thank you so much, Bhavik, for the kind words. 79.85s - 82.29s | So I want to introduce Nick Draphin, 82.29s - 85.05s | who is one of the most talented security engineers, 85.05s - 87.29s | security researchers I have ever worked with. 88.41s - 90.33s | He accomplishes so much stuff, 90.33s - 94.09s | he works on so much stuff beyond all of this. 94.09s - 99.10s | Yeah, he's just incredible, he's amazing. 99.10s - 100.96s | Thanks, Aaron, that's very nice. 100.96s - 102.88s | Yeah, very pleased to meet you, 103.32s - 105.40s | or pleased to have met you and know you. 105.40s - 107.76s | Yeah, and I would like to introduce Bhavik Javadi, 107.76s - 110.88s | who I'm also pleased to call my friend, 110.88s - 113.74s | and I really appreciate our friendship 113.74s - 115.40s | and the things that we've worked on together. 115.40s - 118.00s | Amazing, really kind person. 119.44s - 120.98s | One of the best hardware hackers I know, 120.98s - 125.98s | and we constantly compete for who has the newest tool 126.48s - 129.08s | or who is on the latest firmware of something. 129.08s - 131.40s | He has a tendency to update firmware 131.48s - 132.76s | at the worst possible moment, 132.76s - 135.64s | like right before a critical training or something, 135.64s - 138.44s | it's time to do the latest GPU update. 138.44s - 140.40s | So, that's my friend, Bhavik, so. 146.18s - 150.54s | So, fun fact, we're all really awkward 150.54s - 152.06s | about talking about ourselves, 152.06s - 153.58s | so we


chunk_id: 206_chunk_3
chunk_text:
Aaron, that's very nice. 100.96s - 102.88s | Yeah, very pleased to meet you, 103.32s - 105.40s | or pleased to have met you and know you. 105.40s - 107.76s | Yeah, and I would like to introduce Bhavik Javadi, 107.76s - 110.88s | who I'm also pleased to call my friend, 110.88s - 113.74s | and I really appreciate our friendship 113.74s - 115.40s | and the things that we've worked on together. 115.40s - 118.00s | Amazing, really kind person. 119.44s - 120.98s | One of the best hardware hackers I know, 120.98s - 125.98s | and we constantly compete for who has the newest tool 126.48s - 129.08s | or who is on the latest firmware of something. 129.08s - 131.40s | He has a tendency to update firmware 131.48s - 132.76s | at the worst possible moment, 132.76s - 135.64s | like right before a critical training or something, 135.64s - 138.44s | it's time to do the latest GPU update. 138.44s - 140.40s | So, that's my friend, Bhavik, so. 146.18s - 150.54s | So, fun fact, we're all really awkward 150.54s - 152.06s | about talking about ourselves, 152.06s - 153.58s | so we came up with this shtick 153.58s - 155.20s | of introducing each other instead, 155.20s - 157.44s | so hopefully that worked okay. 159.58s - 163.46s | I do want to talk about one researcher 163.46s - 165.90s | who wasn't able to join us on the stage 166.72s - 167.56s | and that's Kate. 167.56s - 169.74s | Kate has also been involved with the project. 169.74s - 174.30s | She's also one of the finest, most talented hackers 174.30s - 175.62s | I've had the pleasure of working with. 175.62s - 178.02s | We're honored to call her a friend, 178.02s - 180.58s | and she has definitely been a part of this journey as well. 180.58s - 183.70s | So, just want to give a quick thank you to Kate. 183.70s - 184.54s | Where is Kate? 184.54s - 187.09s | There's Kate. 187.09s - 189.33s | All right, so let's get started. 189.33s - 193.81s | Topics of the hour, because holy shit, 75 minutes. 193.81s - 195.41s | This is the longest talk. 195.41s - 196.61s | Who gave us the slot? 197.89s - 200.93s | All right, we'll do our best to make the


chunk_id: 206_chunk_4
chunk_text:
came up with this shtick 153.58s - 155.20s | of introducing each other instead, 155.20s - 157.44s | so hopefully that worked okay. 159.58s - 163.46s | I do want to talk about one researcher 163.46s - 165.90s | who wasn't able to join us on the stage 166.72s - 167.56s | and that's Kate. 167.56s - 169.74s | Kate has also been involved with the project. 169.74s - 174.30s | She's also one of the finest, most talented hackers 174.30s - 175.62s | I've had the pleasure of working with. 175.62s - 178.02s | We're honored to call her a friend, 178.02s - 180.58s | and she has definitely been a part of this journey as well. 180.58s - 183.70s | So, just want to give a quick thank you to Kate. 183.70s - 184.54s | Where is Kate? 184.54s - 187.09s | There's Kate. 187.09s - 189.33s | All right, so let's get started. 189.33s - 193.81s | Topics of the hour, because holy shit, 75 minutes. 193.81s - 195.41s | This is the longest talk. 195.41s - 196.61s | Who gave us the slot? 197.89s - 200.93s | All right, we'll do our best to make the best of it. 200.93s - 202.29s | We got a couple things to cover. 202.29s - 205.53s | We're gonna talk about access control systems 205.53s - 208.33s | and a couple of really critical elements of it. 208.33s - 210.85s | We're gonna talk about obsession, 210.85s - 214.45s | because this has been all-consuming, as we will discuss. 214.45s - 218.41s | And of course, the reason why you are all here, a heist. 218.41s - 221.85s | That's the really exciting stuff that we're here for. 221.85s - 224.29s | But before we begin, Aaron, 224.29s - 225.81s | can you tell us a little bit more 225.81s - 228.17s | about why they should stick around? 228.17s - 230.09s | What does all this actually mean? 230.09s - 231.45s | Absolutely. 231.45s - 233.49s | So, if you look at this video, 233.49s - 235.07s | you can see that there are two cards. 235.07s - 238.65s | These are HID CS cards, theoretically unclonable. 238.65s - 240.57s | And yet, if you look, 240.57s - 244.53s | they have the same ID card number when scanned, right? 245.39s - 247.73s | So, we have cloned


chunk_id: 206_chunk_5
chunk_text:
best of it. 200.93s - 202.29s | We got a couple things to cover. 202.29s - 205.53s | We're gonna talk about access control systems 205.53s - 208.33s | and a couple of really critical elements of it. 208.33s - 210.85s | We're gonna talk about obsession, 210.85s - 214.45s | because this has been all-consuming, as we will discuss. 214.45s - 218.41s | And of course, the reason why you are all here, a heist. 218.41s - 221.85s | That's the really exciting stuff that we're here for. 221.85s - 224.29s | But before we begin, Aaron, 224.29s - 225.81s | can you tell us a little bit more 225.81s - 228.17s | about why they should stick around? 228.17s - 230.09s | What does all this actually mean? 230.09s - 231.45s | Absolutely. 231.45s - 233.49s | So, if you look at this video, 233.49s - 235.07s | you can see that there are two cards. 235.07s - 238.65s | These are HID CS cards, theoretically unclonable. 238.65s - 240.57s | And yet, if you look, 240.57s - 244.53s | they have the same ID card number when scanned, right? 245.39s - 247.73s | So, we have cloned the unclonable. 247.73s - 251.80s | And in this talk, we're gonna show you how we did it. 251.80s - 254.48s | So, I mentioned obsessions, 254.48s - 257.76s | because we all get that, right? 257.76s - 260.24s | This project has been kind of all-consuming 260.24s - 263.56s | for all three of us in different ways. 263.56s - 267.24s | It has took over my entire COVID, basically, 267.24s - 270.70s | because we had nothing else to do other than wake up, 270.70s - 273.80s | work for 12 to 14 hours, and then go to bed, 273.80s - 276.64s | and then rinse and repeat for a few months, basically. 277.64s - 281.72s | And even got into shower thoughts in the shower. 281.72s - 283.76s | We can't stop thinking about this stuff. 283.76s - 286.84s | Essentially, thinking about this research when we wake up, 286.84s - 288.36s | thinking about it before we go to bed, 288.36s - 289.96s | waking up in the middle of the night, 289.96s - 290.96s | thinking about it, 290.96s - 292.88s | going to dinner with our significant others, 292.88s - 295.96s | and all


chunk_id: 206_chunk_6
chunk_text:
the unclonable. 247.73s - 251.80s | And in this talk, we're gonna show you how we did it. 251.80s - 254.48s | So, I mentioned obsessions, 254.48s - 257.76s | because we all get that, right? 257.76s - 260.24s | This project has been kind of all-consuming 260.24s - 263.56s | for all three of us in different ways. 263.56s - 267.24s | It has took over my entire COVID, basically, 267.24s - 270.70s | because we had nothing else to do other than wake up, 270.70s - 273.80s | work for 12 to 14 hours, and then go to bed, 273.80s - 276.64s | and then rinse and repeat for a few months, basically. 277.64s - 281.72s | And even got into shower thoughts in the shower. 281.72s - 283.76s | We can't stop thinking about this stuff. 283.76s - 286.84s | Essentially, thinking about this research when we wake up, 286.84s - 288.36s | thinking about it before we go to bed, 288.36s - 289.96s | waking up in the middle of the night, 289.96s - 290.96s | thinking about it, 290.96s - 292.88s | going to dinner with our significant others, 292.88s - 295.96s | and all we can think about is HID research. 295.96s - 298.06s | So, that's what brought us here today. 298.96s - 302.72s | Yeah, and we have so many HID readers at this point, 302.72s - 304.12s | it's kind of crazy. 304.12s - 307.04s | So many, in fact, that my now-husband 307.04s - 308.98s | actually used an HID reader 308.98s - 311.12s | in proposing to me a few years ago. 312.08s - 313.52s | It's true. 313.52s - 314.52s | We're not kidding. 318.36s - 321.00s | But yeah, this is collectively, 321.00s - 323.28s | thousands of hours collectively, 323.28s - 328.08s | hundreds of readers, way, way too many dollars. 328.08s - 330.40s | I was considering trying to tabulate it, 330.40s - 331.92s | and then I thought better of it. 331.92s - 334.12s | So, let's just say it was a lot. 334.12s - 335.38s | And of course, very little sleep, 335.38s - 336.88s | including preparing for this talk. 336.88s - 338.56s | So, here we are. 339.48s - 343.08s | We are gonna go kind of quick on a couple of topics. 343.08s - 345.24s | As long as this


chunk_id: 206_chunk_7
chunk_text:
we can think about is HID research. 295.96s - 298.06s | So, that's what brought us here today. 298.96s - 302.72s | Yeah, and we have so many HID readers at this point, 302.72s - 304.12s | it's kind of crazy. 304.12s - 307.04s | So many, in fact, that my now-husband 307.04s - 308.98s | actually used an HID reader 308.98s - 311.12s | in proposing to me a few years ago. 312.08s - 313.52s | It's true. 313.52s - 314.52s | We're not kidding. 318.36s - 321.00s | But yeah, this is collectively, 321.00s - 323.28s | thousands of hours collectively, 323.28s - 328.08s | hundreds of readers, way, way too many dollars. 328.08s - 330.40s | I was considering trying to tabulate it, 330.40s - 331.92s | and then I thought better of it. 331.92s - 334.12s | So, let's just say it was a lot. 334.12s - 335.38s | And of course, very little sleep, 335.38s - 336.88s | including preparing for this talk. 336.88s - 338.56s | So, here we are. 339.48s - 343.08s | We are gonna go kind of quick on a couple of topics. 343.08s - 345.24s | As long as this talk is, 345.24s - 348.44s | it is not a soup to nuts on how access control works, 348.44s - 350.32s | but in order for you to understand 350.32s - 351.60s | why this stuff is important, 351.60s - 354.04s | you do need some basic building blocks. 354.04s - 356.12s | So, we've worked really hard to try to give you guys 356.12s - 358.80s | those basic building blocks as quickly as possible. 358.80s - 361.28s | If something doesn't fully track, it's okay. 361.28s - 362.74s | This stuff is kind of weird, 362.74s - 366.14s | but I suspect that you guys will get it pretty easily. 366.14s - 369.94s | So, the main foundation of all of this stuff 369.94s - 372.18s | is physical access control systems. 372.18s - 374.46s | And these are, of course, physical security controls 374.46s - 378.50s | that are designed to control access into or out of areas. 378.50s - 380.54s | And there's a lot of different components to these, right? 380.54s - 382.50s | There's readers, there's cards, 382.50s - 385.50s | there's door lock hardware and stuff like that. 385.50s - 389.10s | And


chunk_id: 206_chunk_8
chunk_text:
talk is, 345.24s - 348.44s | it is not a soup to nuts on how access control works, 348.44s - 350.32s | but in order for you to understand 350.32s - 351.60s | why this stuff is important, 351.60s - 354.04s | you do need some basic building blocks. 354.04s - 356.12s | So, we've worked really hard to try to give you guys 356.12s - 358.80s | those basic building blocks as quickly as possible. 358.80s - 361.28s | If something doesn't fully track, it's okay. 361.28s - 362.74s | This stuff is kind of weird, 362.74s - 366.14s | but I suspect that you guys will get it pretty easily. 366.14s - 369.94s | So, the main foundation of all of this stuff 369.94s - 372.18s | is physical access control systems. 372.18s - 374.46s | And these are, of course, physical security controls 374.46s - 378.50s | that are designed to control access into or out of areas. 378.50s - 380.54s | And there's a lot of different components to these, right? 380.54s - 382.50s | There's readers, there's cards, 382.50s - 385.50s | there's door lock hardware and stuff like that. 385.50s - 389.10s | And ultimately, there's a few main tenants 389.10s - 392.10s | that all these systems have to be focused on and hit 392.10s - 394.98s | in order to be successful in the marketplace. 394.98s - 398.78s | In order for it to be viable, these things have to be cheap. 398.78s - 400.42s | They have to be cost effective. 400.42s - 404.82s | Because for literally anyone else except us in this room, 404.82s - 408.38s | security isn't fun, it's a cost. 408.38s - 411.18s | And so, since businesses have to make money, 411.18s - 413.14s | for better or for worse, 413.14s - 414.98s | they don't really necessarily like spending money 414.98s - 418.70s | on security because they exist to maximize profit. 418.70s - 422.18s | So, cost effectiveness actually has a huge, huge driver 422.22s - 425.18s | for how this stuff gets designed and how it sticks around. 425.18s - 427.78s | It also, of course, has to be easy to use 427.78s - 431.06s | because security that gets in your way 431.06s - 432.62s | and prevents you from doing your job 432.62s - 434.90s | or getting where you


chunk_id: 206_chunk_9
chunk_text:
ultimately, there's a few main tenants 389.10s - 392.10s | that all these systems have to be focused on and hit 392.10s - 394.98s | in order to be successful in the marketplace. 394.98s - 398.78s | In order for it to be viable, these things have to be cheap. 398.78s - 400.42s | They have to be cost effective. 400.42s - 404.82s | Because for literally anyone else except us in this room, 404.82s - 408.38s | security isn't fun, it's a cost. 408.38s - 411.18s | And so, since businesses have to make money, 411.18s - 413.14s | for better or for worse, 413.14s - 414.98s | they don't really necessarily like spending money 414.98s - 418.70s | on security because they exist to maximize profit. 418.70s - 422.18s | So, cost effectiveness actually has a huge, huge driver 422.22s - 425.18s | for how this stuff gets designed and how it sticks around. 425.18s - 427.78s | It also, of course, has to be easy to use 427.78s - 431.06s | because security that gets in your way 431.06s - 432.62s | and prevents you from doing your job 432.62s - 434.90s | or getting where you need to be also sucks 434.90s - 437.46s | and incurs a different kind of cost, 437.46s - 441.98s | both to you psychologically and to the business. 441.98s - 444.34s | By way of example, I recall, 444.34s - 445.70s | there was a pen test that we were on 445.70s - 448.50s | and we noticed that, during reconnaissance, 448.50s - 450.30s | we noticed there was a side door 450.30s - 452.46s | that people kept coming out of 452.46s - 453.86s | and it wouldn't latch all the way. 453.86s - 455.42s | And we're like, we can just walk in here. 455.42s - 457.46s | And so, we used it several times. 457.46s - 460.02s | And I remember that, in the after action report, 460.02s - 461.38s | we brought it up and we're like, 461.38s - 463.30s | by the way, do you guys know, 463.30s - 467.34s | this door doesn't latch and it goes right into your office? 467.34s - 469.62s | And the head of facilities was there and he's like, 469.62s - 472.30s | yeah, let me tell you about that door, see? 473.66s - 476.34s | So, this


chunk_id: 206_chunk_10
chunk_text:
need to be also sucks 434.90s - 437.46s | and incurs a different kind of cost, 437.46s - 441.98s | both to you psychologically and to the business. 441.98s - 444.34s | By way of example, I recall, 444.34s - 445.70s | there was a pen test that we were on 445.70s - 448.50s | and we noticed that, during reconnaissance, 448.50s - 450.30s | we noticed there was a side door 450.30s - 452.46s | that people kept coming out of 452.46s - 453.86s | and it wouldn't latch all the way. 453.86s - 455.42s | And we're like, we can just walk in here. 455.42s - 457.46s | And so, we used it several times. 457.46s - 460.02s | And I remember that, in the after action report, 460.02s - 461.38s | we brought it up and we're like, 461.38s - 463.30s | by the way, do you guys know, 463.30s - 467.34s | this door doesn't latch and it goes right into your office? 467.34s - 469.62s | And the head of facilities was there and he's like, 469.62s - 472.30s | yeah, let me tell you about that door, see? 473.66s - 476.34s | So, this is a very efficient building. 476.34s - 478.34s | It seals very, very well. 478.34s - 479.66s | And when the weather is nice 479.66s - 481.42s | and the HVAC system's not running, 481.42s - 483.98s | we have everything adjusted and that's fine, 483.98s - 485.82s | but then, when the HVAC system is running, 485.82s - 488.06s | there's a positive air pressure inside the building 488.06s - 489.90s | and now, the door closers 489.90s - 491.82s | won't actually close the doors fully. 491.82s - 494.18s | So, we go through and we tighten all the door closers 494.18s - 496.10s | and we're like, okay, it's good. 496.10s - 497.46s | And then, the weather gets nice again 497.46s - 500.62s | and the HVAC system is off and the doors start slamming. 500.62s - 502.26s | And so, we got all these trouble tickets 502.26s - 504.30s | of people complaining that they're on meetings, 504.30s - 506.82s | they're on sales calls and the door is slamming. 506.82s - 510.30s | And so, we had to choose between security 510.30s - 512.38s | and keeping our employees happy. 512.38s - 513.62s |


chunk_id: 206_chunk_11
chunk_text:
is a very efficient building. 476.34s - 478.34s | It seals very, very well. 478.34s - 479.66s | And when the weather is nice 479.66s - 481.42s | and the HVAC system's not running, 481.42s - 483.98s | we have everything adjusted and that's fine, 483.98s - 485.82s | but then, when the HVAC system is running, 485.82s - 488.06s | there's a positive air pressure inside the building 488.06s - 489.90s | and now, the door closers 489.90s - 491.82s | won't actually close the doors fully. 491.82s - 494.18s | So, we go through and we tighten all the door closers 494.18s - 496.10s | and we're like, okay, it's good. 496.10s - 497.46s | And then, the weather gets nice again 497.46s - 500.62s | and the HVAC system is off and the doors start slamming. 500.62s - 502.26s | And so, we got all these trouble tickets 502.26s - 504.30s | of people complaining that they're on meetings, 504.30s - 506.82s | they're on sales calls and the door is slamming. 506.82s - 510.30s | And so, we had to choose between security 510.30s - 512.38s | and keeping our employees happy. 512.38s - 513.62s | What do you think won? 514.62s - 516.90s | Of course, it wouldn't be a story if it was security. 516.90s - 518.32s | It was the latter. 518.32s - 521.70s | So, simplicity, ease of use, that's a huge deal. 521.70s - 523.30s | The golden rule of access control 523.30s - 525.46s | is never get in the way of doing business, 525.46s - 526.66s | for better or for worse. 526.66s - 529.54s | And that really drives a lot of this stuff. 529.54s - 531.50s | So, there's a couple components you need to understand 531.50s - 532.62s | about access control. 532.62s - 534.74s | And if you've been doing any of this stuff at all, 534.74s - 537.10s | you probably already know about this, 537.10s - 539.38s | but we'll give you the building blocks anyway. 539.38s - 542.22s | So, we have cards, we have readers, 542.22s - 545.62s | we have door hardware, like an electric strike or latch, 545.62s - 547.68s | and we have door controller of some kind. 547.68s - 551.42s | This is an embedded device that controls access. 551.42s - 553.38s | It's what makes the


chunk_id: 206_chunk_12
chunk_text:
What do you think won? 514.62s - 516.90s | Of course, it wouldn't be a story if it was security. 516.90s - 518.32s | It was the latter. 518.32s - 521.70s | So, simplicity, ease of use, that's a huge deal. 521.70s - 523.30s | The golden rule of access control 523.30s - 525.46s | is never get in the way of doing business, 525.46s - 526.66s | for better or for worse. 526.66s - 529.54s | And that really drives a lot of this stuff. 529.54s - 531.50s | So, there's a couple components you need to understand 531.50s - 532.62s | about access control. 532.62s - 534.74s | And if you've been doing any of this stuff at all, 534.74s - 537.10s | you probably already know about this, 537.10s - 539.38s | but we'll give you the building blocks anyway. 539.38s - 542.22s | So, we have cards, we have readers, 542.22s - 545.62s | we have door hardware, like an electric strike or latch, 545.62s - 547.68s | and we have door controller of some kind. 547.68s - 551.42s | This is an embedded device that controls access. 551.42s - 553.38s | It's what makes the logical decision. 553.38s - 555.42s | And of course, it has a database of some kind 555.42s - 558.10s | that it synchronizes with and connects to. 558.10s - 562.50s | And ultimately, the sequence diagram, the way it works, 562.50s - 565.78s | is we have, we'll zoom in here. 565.78s - 567.82s | So, we have a card presentation. 567.82s - 569.88s | So, that's you presenting your card. 569.88s - 571.94s | The reader activates it. 571.94s - 574.94s | And then some weekend data is retrieved from the card. 574.94s - 576.36s | It's sent to the reader. 576.36s - 577.86s | The reader goes ahead and grabs that 577.86s - 580.06s | and sends it to all the way to the controller. 580.06s - 581.50s | That's what that beep is. 581.50s - 583.10s | And then the controller makes a decision. 583.10s - 586.02s | And if you have access, it activates the relay. 586.02s - 588.14s | And that's basically it. 588.14s - 589.96s | But for this talk, we're not gonna talk 589.96s - 591.24s | about the back half of that. 591.24s - 593.08s | We're really only just gonna focus


chunk_id: 206_chunk_13
chunk_text:
logical decision. 553.38s - 555.42s | And of course, it has a database of some kind 555.42s - 558.10s | that it synchronizes with and connects to. 558.10s - 562.50s | And ultimately, the sequence diagram, the way it works, 562.50s - 565.78s | is we have, we'll zoom in here. 565.78s - 567.82s | So, we have a card presentation. 567.82s - 569.88s | So, that's you presenting your card. 569.88s - 571.94s | The reader activates it. 571.94s - 574.94s | And then some weekend data is retrieved from the card. 574.94s - 576.36s | It's sent to the reader. 576.36s - 577.86s | The reader goes ahead and grabs that 577.86s - 580.06s | and sends it to all the way to the controller. 580.06s - 581.50s | That's what that beep is. 581.50s - 583.10s | And then the controller makes a decision. 583.10s - 586.02s | And if you have access, it activates the relay. 586.02s - 588.14s | And that's basically it. 588.14s - 589.96s | But for this talk, we're not gonna talk 589.96s - 591.24s | about the back half of that. 591.24s - 593.08s | We're really only just gonna focus 593.08s - 595.60s | on that first part, card to reader, 595.60s - 597.16s | because that's such a critical aspect, 597.16s - 600.68s | and it's oftentimes the most exposed element 600.68s - 602.66s | of the access control system. 602.66s - 604.32s | And we'll see all the ways that people 604.32s - 605.36s | have tried to do it right, 605.36s - 607.56s | and still, sometimes, you struggle. 608.56s - 610.00s | So, what is WGAN data? 610.00s - 611.64s | This is something that's important to understand 611.64s - 612.52s | about access control, 612.52s - 615.16s | if you haven't had to deal with it before. 615.16s - 619.28s | WGAN data is a static binary authentication string 619.28s - 623.08s | that represents a very simple series of numbers. 623.08s - 625.68s | You got your facility code, you got a card number, 625.68s - 628.48s | and you also have a set of rules that are used 628.48s - 631.04s | to encode these into a static binary string, 631.04s - 632.76s | and that's called the bit format. 632.76s - 634.50s | And we don't need to get into the details


chunk_id: 206_chunk_14
chunk_text:
593.08s - 595.60s | on that first part, card to reader, 595.60s - 597.16s | because that's such a critical aspect, 597.16s - 600.68s | and it's oftentimes the most exposed element 600.68s - 602.66s | of the access control system. 602.66s - 604.32s | And we'll see all the ways that people 604.32s - 605.36s | have tried to do it right, 605.36s - 607.56s | and still, sometimes, you struggle. 608.56s - 610.00s | So, what is WGAN data? 610.00s - 611.64s | This is something that's important to understand 611.64s - 612.52s | about access control, 612.52s - 615.16s | if you haven't had to deal with it before. 615.16s - 619.28s | WGAN data is a static binary authentication string 619.28s - 623.08s | that represents a very simple series of numbers. 623.08s - 625.68s | You got your facility code, you got a card number, 625.68s - 628.48s | and you also have a set of rules that are used 628.48s - 631.04s | to encode these into a static binary string, 631.04s - 632.76s | and that's called the bit format. 632.76s - 634.50s | And we don't need to get into the details of it. 634.50s - 636.48s | All you gotta know is that it's a little 636.48s - 637.52s | static binary string. 637.52s - 639.68s | We'll talk about that more in a little bit. 640.60s - 642.92s | There is a difference, though, technically, 642.92s - 644.16s | if you wanna get technical about it, 644.16s - 648.70s | I suspect you all do, between a card and a credential. 648.70s - 651.86s | See, RFID cards of any kind 651.86s - 654.18s | are really just memory storage devices. 654.18s - 656.22s | Like a USB stick, but a lot shittier. 657.86s - 659.64s | They don't become a credential 659.64s - 662.86s | until you put access control data on it. 662.86s - 664.90s | And so, technically, these two concepts 664.90s - 666.94s | are discrete concepts. 666.94s - 668.58s | So, something to keep in mind. 668.58s - 670.38s | The technology is different 670.38s - 673.70s | from how you put data on that technology. 673.70s - 675.14s | And if you really think about it, 675.14s - 678.18s | we think that all fundamental aspects 678.66s - 680.58s | of access control can


chunk_id: 206_chunk_15
chunk_text:
of it. 634.50s - 636.48s | All you gotta know is that it's a little 636.48s - 637.52s | static binary string. 637.52s - 639.68s | We'll talk about that more in a little bit. 640.60s - 642.92s | There is a difference, though, technically, 642.92s - 644.16s | if you wanna get technical about it, 644.16s - 648.70s | I suspect you all do, between a card and a credential. 648.70s - 651.86s | See, RFID cards of any kind 651.86s - 654.18s | are really just memory storage devices. 654.18s - 656.22s | Like a USB stick, but a lot shittier. 657.86s - 659.64s | They don't become a credential 659.64s - 662.86s | until you put access control data on it. 662.86s - 664.90s | And so, technically, these two concepts 664.90s - 666.94s | are discrete concepts. 666.94s - 668.58s | So, something to keep in mind. 668.58s - 670.38s | The technology is different 670.38s - 673.70s | from how you put data on that technology. 673.70s - 675.14s | And if you really think about it, 675.14s - 678.18s | we think that all fundamental aspects 678.66s - 680.58s | of access control can be boiled down 680.58s - 683.06s | into either an encode or decode operation. 683.06s - 685.34s | Storage or retrieval. 685.34s - 687.06s | So, let's talk about how storage works. 687.06s - 689.96s | How do we make that credential in the first place? 689.96s - 693.18s | How do we go from card to credential? 693.18s - 695.98s | Well, you can see we have a facility code 695.98s - 700.54s | and card number that goes into some set of rules 700.54s - 703.46s | called the bit format, and you produce WGAN data. 703.46s - 707.00s | And that WGAN data is then stored on the card. 707.00s - 710.30s | If you're having trouble visualizing this, let's show you. 710.30s - 713.60s | So, for example, let's say we have a facility code 713.60s - 715.70s | of 42 that we want to encode. 715.70s - 718.02s | We'll go ahead and grab our handy dandy calculator, 718.02s - 720.68s | and we'll convert that decimal to binary. 720.68s - 723.60s | So, that'll give us these eight bits here. 723.60s - 725.22s | Then we have our unique card number. 725.22s - 728.72s


chunk_id: 206_chunk_16
chunk_text:
be boiled down 680.58s - 683.06s | into either an encode or decode operation. 683.06s - 685.34s | Storage or retrieval. 685.34s - 687.06s | So, let's talk about how storage works. 687.06s - 689.96s | How do we make that credential in the first place? 689.96s - 693.18s | How do we go from card to credential? 693.18s - 695.98s | Well, you can see we have a facility code 695.98s - 700.54s | and card number that goes into some set of rules 700.54s - 703.46s | called the bit format, and you produce WGAN data. 703.46s - 707.00s | And that WGAN data is then stored on the card. 707.00s - 710.30s | If you're having trouble visualizing this, let's show you. 710.30s - 713.60s | So, for example, let's say we have a facility code 713.60s - 715.70s | of 42 that we want to encode. 715.70s - 718.02s | We'll go ahead and grab our handy dandy calculator, 718.02s - 720.68s | and we'll convert that decimal to binary. 720.68s - 723.60s | So, that'll give us these eight bits here. 723.60s - 725.22s | Then we have our unique card number. 725.22s - 728.72s | That's, of course, 1337, obviously. 728.72s - 731.60s | And we'll go ahead and convert that to binary as well. 731.60s - 733.52s | And what you see at the bottom left there, 733.52s - 734.60s | that's the bit format. 734.60s - 736.92s | That defines where these bits go 736.92s - 738.84s | in that long string. 738.84s - 740.80s | So, we'll go ahead and take the facility code 740.80s - 741.64s | and card number. 741.64s - 744.60s | We'll drop that into our bit format, 744.60s - 746.40s | do some parity bit calculations 746.40s - 747.90s | that we don't need to get into, 747.90s - 749.72s | and that is our authentication string. 749.72s - 752.38s | That's what the door controller is actually waiting for. 752.38s - 753.68s | And depending on the credential, 753.68s - 755.56s | we might have to add a preamble to it, 755.56s - 758.10s | but then that whole blob gets written to the card. 758.10s - 759.12s | That's it. 759.12s - 761.48s | That's what a credential basically is. 761.48s - 766.04s | Very simple, static data stored on a memory device. 766.04s


chunk_id: 206_chunk_17
chunk_text:
| That's, of course, 1337, obviously. 728.72s - 731.60s | And we'll go ahead and convert that to binary as well. 731.60s - 733.52s | And what you see at the bottom left there, 733.52s - 734.60s | that's the bit format. 734.60s - 736.92s | That defines where these bits go 736.92s - 738.84s | in that long string. 738.84s - 740.80s | So, we'll go ahead and take the facility code 740.80s - 741.64s | and card number. 741.64s - 744.60s | We'll drop that into our bit format, 744.60s - 746.40s | do some parity bit calculations 746.40s - 747.90s | that we don't need to get into, 747.90s - 749.72s | and that is our authentication string. 749.72s - 752.38s | That's what the door controller is actually waiting for. 752.38s - 753.68s | And depending on the credential, 753.68s - 755.56s | we might have to add a preamble to it, 755.56s - 758.10s | but then that whole blob gets written to the card. 758.10s - 759.12s | That's it. 759.12s - 761.48s | That's what a credential basically is. 761.48s - 766.04s | Very simple, static data stored on a memory device. 766.04s - 768.16s | Similarly, when you're reading a card, 768.16s - 769.88s | it's just that in reverse. 769.88s - 771.48s | So, you have your card memory. 771.48s - 773.52s | You gotta get in there, get it out. 773.52s - 775.36s | That's what the reader does. 775.36s - 777.32s | And then, whoop, went too fast. 777.32s - 780.27s | My apologies. 780.27s - 781.71s | Too fast for my own good. 781.71s - 783.23s | There we go. 783.23s - 785.07s | Encode, da-da, okay. 785.07s - 786.91s | So, the reader grabs that credential data, 786.91s - 788.83s | it transmits it to the door controller, 788.83s - 790.79s | and now the controller has to interpret it. 790.79s - 792.23s | So, what does that look like? 792.23s - 794.21s | I'm so glad you didn't ask. 794.21s - 795.27s | So, here's our credential. 795.27s - 796.81s | We present it to the reader. 796.81s - 799.79s | The reader grabs that credential data, retrieves it, 799.79s - 802.33s | it processes it, rips out that preamble, 802.33s - 804.53s | sends the WGAN to the door controller, 804.53s - 807.53s | and


chunk_id: 206_chunk_18
chunk_text:
- 768.16s | Similarly, when you're reading a card, 768.16s - 769.88s | it's just that in reverse. 769.88s - 771.48s | So, you have your card memory. 771.48s - 773.52s | You gotta get in there, get it out. 773.52s - 775.36s | That's what the reader does. 775.36s - 777.32s | And then, whoop, went too fast. 777.32s - 780.27s | My apologies. 780.27s - 781.71s | Too fast for my own good. 781.71s - 783.23s | There we go. 783.23s - 785.07s | Encode, da-da, okay. 785.07s - 786.91s | So, the reader grabs that credential data, 786.91s - 788.83s | it transmits it to the door controller, 788.83s - 790.79s | and now the controller has to interpret it. 790.79s - 792.23s | So, what does that look like? 792.23s - 794.21s | I'm so glad you didn't ask. 794.21s - 795.27s | So, here's our credential. 795.27s - 796.81s | We present it to the reader. 796.81s - 799.79s | The reader grabs that credential data, retrieves it, 799.79s - 802.33s | it processes it, rips out that preamble, 802.33s - 804.53s | sends the WGAN to the door controller, 804.53s - 807.53s | and now that door controller interprets that data, 807.53s - 810.37s | breaks it back apart into its constituent components, 810.37s - 811.81s | and we have, of course, 811.81s - 814.05s | our original facility code and card number. 814.05s - 814.89s | Very simple. 814.89s - 816.89s | Happens in the blink of an eye. 816.89s - 818.41s | So, in this example, 818.41s - 821.19s | we're talking about unauthenticated cards. 821.19s - 823.25s | You'll notice in this diagram, 823.25s - 824.65s | there was no password needed 824.65s - 826.73s | to do either of these operations. 827.45s - 829.89s | If you guys have ever used a prox credential 829.89s - 831.77s | or old school credential, 831.77s - 835.79s | if you've used a flipper to clone low frequency tag, 835.79s - 837.85s | that's the type of card we're talking about. 837.85s - 840.37s | These are cards that don't require 840.37s - 842.45s | any security or authentication 842.45s - 845.09s | in order to read that data off of it. 845.09s - 847.15s | So, you'll see in the sequence diagram, 847.15s - 848.49s | you present the card, 848.49s -


chunk_id: 206_chunk_19
chunk_text:
now that door controller interprets that data, 807.53s - 810.37s | breaks it back apart into its constituent components, 810.37s - 811.81s | and we have, of course, 811.81s - 814.05s | our original facility code and card number. 814.05s - 814.89s | Very simple. 814.89s - 816.89s | Happens in the blink of an eye. 816.89s - 818.41s | So, in this example, 818.41s - 821.19s | we're talking about unauthenticated cards. 821.19s - 823.25s | You'll notice in this diagram, 823.25s - 824.65s | there was no password needed 824.65s - 826.73s | to do either of these operations. 827.45s - 829.89s | If you guys have ever used a prox credential 829.89s - 831.77s | or old school credential, 831.77s - 835.79s | if you've used a flipper to clone low frequency tag, 835.79s - 837.85s | that's the type of card we're talking about. 837.85s - 840.37s | These are cards that don't require 840.37s - 842.45s | any security or authentication 842.45s - 845.09s | in order to read that data off of it. 845.09s - 847.15s | So, you'll see in the sequence diagram, 847.15s - 848.49s | you present the card, 848.49s - 850.17s | the reader powers it on, 850.17s - 851.61s | it spits out the data, 851.61s - 852.87s | the reader takes the data, 852.87s - 854.57s | and then forwards it to the controller. 854.57s - 855.85s | Simple as that. 855.85s - 857.93s | But if you have unauthenticated credentials, 857.93s - 859.17s | you have, of course, 859.17s - 861.53s | unauthenticated problems. 861.53s - 862.69s | Generally speaking, 862.69s - 863.53s | this is an issue 863.53s - 865.81s | because there's no protection for the data at rest, 865.81s - 867.83s | there's no protection for the data in motion, 867.83s - 868.67s | and as a result, 868.67s - 870.45s | it's very easy to tamper with that data, 870.45s - 872.95s | it's very easy to clone that data. 872.95s - 874.77s | So, what's the solution? 874.77s - 876.21s | Authentication, right? 876.21s - 877.63s | Easy enough. 877.63s - 880.09s | So, we can add an authentication layer in. 880.09s - 881.57s | You'll notice, right over here, 881.57s - 882.99s | we added a little, boop, 882.99s - 884.77s | mutual authentication. 884.77s - 887.87s | So now, in


chunk_id: 206_chunk_20
chunk_text:
850.17s | the reader powers it on, 850.17s - 851.61s | it spits out the data, 851.61s - 852.87s | the reader takes the data, 852.87s - 854.57s | and then forwards it to the controller. 854.57s - 855.85s | Simple as that. 855.85s - 857.93s | But if you have unauthenticated credentials, 857.93s - 859.17s | you have, of course, 859.17s - 861.53s | unauthenticated problems. 861.53s - 862.69s | Generally speaking, 862.69s - 863.53s | this is an issue 863.53s - 865.81s | because there's no protection for the data at rest, 865.81s - 867.83s | there's no protection for the data in motion, 867.83s - 868.67s | and as a result, 868.67s - 870.45s | it's very easy to tamper with that data, 870.45s - 872.95s | it's very easy to clone that data. 872.95s - 874.77s | So, what's the solution? 874.77s - 876.21s | Authentication, right? 876.21s - 877.63s | Easy enough. 877.63s - 880.09s | So, we can add an authentication layer in. 880.09s - 881.57s | You'll notice, right over here, 881.57s - 882.99s | we added a little, boop, 882.99s - 884.77s | mutual authentication. 884.77s - 887.87s | So now, in order for us to access that memory 887.87s - 889.59s | for reading or for writing, 889.59s - 892.01s | we have to authenticate with that card. 892.01s - 893.13s | Simple enough. 893.13s - 895.17s | We can even go a step further, 895.17s - 897.09s | and we can, before writing that data, 897.09s - 898.31s | we can encrypt it, 898.31s - 899.73s | and put it on the card. 899.73s - 900.81s | And that's what we call, actually, 900.81s - 902.17s | transport encryption. 902.17s - 904.33s | And it also adds another step, 904.33s - 905.45s | right there. 905.45s - 908.65s | So now, the reader has to authenticate with the card, 908.65s - 909.69s | unlock it, 909.69s - 911.47s | grab the encrypted data, 911.47s - 913.13s | and now it has to then decrypt it, 913.13s - 915.37s | usually with a different key, 915.37s - 917.51s | and then get the WGAN data, 917.51s - 919.29s | send it to the controller. 919.29s - 922.89s | So, this is the cornerstone of modern access control, 922.89s - 925.21s | in terms of how RFID cards work, 925.21s - 926.41s


chunk_id: 206_chunk_21
chunk_text:
order for us to access that memory 887.87s - 889.59s | for reading or for writing, 889.59s - 892.01s | we have to authenticate with that card. 892.01s - 893.13s | Simple enough. 893.13s - 895.17s | We can even go a step further, 895.17s - 897.09s | and we can, before writing that data, 897.09s - 898.31s | we can encrypt it, 898.31s - 899.73s | and put it on the card. 899.73s - 900.81s | And that's what we call, actually, 900.81s - 902.17s | transport encryption. 902.17s - 904.33s | And it also adds another step, 904.33s - 905.45s | right there. 905.45s - 908.65s | So now, the reader has to authenticate with the card, 908.65s - 909.69s | unlock it, 909.69s - 911.47s | grab the encrypted data, 911.47s - 913.13s | and now it has to then decrypt it, 913.13s - 915.37s | usually with a different key, 915.37s - 917.51s | and then get the WGAN data, 917.51s - 919.29s | send it to the controller. 919.29s - 922.89s | So, this is the cornerstone of modern access control, 922.89s - 925.21s | in terms of how RFID cards work, 925.21s - 926.41s | but of course, 926.41s - 929.61s | mo security, mo problems, my friends, right? 929.61s - 931.57s | Because if you have keys that you gotta use, 931.57s - 933.29s | you have to manage those keys. 933.29s - 935.49s | They have to be generated appropriately. 935.49s - 937.57s | They have to be stored properly. 937.57s - 940.05s | And, of course, you have to use them correctly. 940.05s - 941.89s | If you write them down on a Post-it, 941.89s - 944.49s | or, say, put them in an Android app, mobile app, 944.49s - 945.43s | and not realize it, 945.43s - 947.33s | and people disassemble it and find it, 947.33s - 949.33s | that's kind of a problem. 949.33s - 950.81s | We can also go a step further, 950.81s - 953.29s | and we're just touching on this topic very lightly. 953.29s - 955.51s | If we wanna make sure that we don't put the same key 955.51s - 956.49s | in every card, 956.49s - 959.07s | we can, of course, do diversification. 959.07s - 962.99s | So, a key diversification function, 962.99s - 965.69s | or KDF, as it's colloquially


chunk_id: 206_chunk_22
chunk_text:
| but of course, 926.41s - 929.61s | mo security, mo problems, my friends, right? 929.61s - 931.57s | Because if you have keys that you gotta use, 931.57s - 933.29s | you have to manage those keys. 933.29s - 935.49s | They have to be generated appropriately. 935.49s - 937.57s | They have to be stored properly. 937.57s - 940.05s | And, of course, you have to use them correctly. 940.05s - 941.89s | If you write them down on a Post-it, 941.89s - 944.49s | or, say, put them in an Android app, mobile app, 944.49s - 945.43s | and not realize it, 945.43s - 947.33s | and people disassemble it and find it, 947.33s - 949.33s | that's kind of a problem. 949.33s - 950.81s | We can also go a step further, 950.81s - 953.29s | and we're just touching on this topic very lightly. 953.29s - 955.51s | If we wanna make sure that we don't put the same key 955.51s - 956.49s | in every card, 956.49s - 959.07s | we can, of course, do diversification. 959.07s - 962.99s | So, a key diversification function, 962.99s - 965.69s | or KDF, as it's colloquially referred to, 965.69s - 968.37s | basically takes a secret master key, 968.37s - 970.81s | some sort of unique value tied to the credential, 970.81s - 972.81s | like a CSN or UID, 972.81s - 975.97s | and sometimes an optional salt or piece of context, 975.97s - 977.69s | and that goes into the KDF, 977.69s - 979.73s | and what comes out is a unique key 979.73s - 982.45s | that is just for that credential and nothing else. 983.53s - 984.81s | And that's a pretty solid system. 984.81s - 986.13s | That's the best practice, 986.13s - 989.21s | and almost every vendor follows it these days. 989.21s - 992.25s | Now, you might wonder how are these master keys generated? 992.25s - 993.21s | How are they used? 993.21s - 995.61s | Because any of you who have ever bought 995.61s - 998.17s | access control systems or used them, 998.17s - 1000.05s | you may not realize or may not have thought 1000.05s - 1002.85s | that you don't actually get to pick that key. 1002.85s - 1006.17s | Generally speaking, these keys fall into two categories, 1006.17s - 1010.63s | and that's


chunk_id: 206_chunk_23
chunk_text:
referred to, 965.69s - 968.37s | basically takes a secret master key, 968.37s - 970.81s | some sort of unique value tied to the credential, 970.81s - 972.81s | like a CSN or UID, 972.81s - 975.97s | and sometimes an optional salt or piece of context, 975.97s - 977.69s | and that goes into the KDF, 977.69s - 979.73s | and what comes out is a unique key 979.73s - 982.45s | that is just for that credential and nothing else. 983.53s - 984.81s | And that's a pretty solid system. 984.81s - 986.13s | That's the best practice, 986.13s - 989.21s | and almost every vendor follows it these days. 989.21s - 992.25s | Now, you might wonder how are these master keys generated? 992.25s - 993.21s | How are they used? 993.21s - 995.61s | Because any of you who have ever bought 995.61s - 998.17s | access control systems or used them, 998.17s - 1000.05s | you may not realize or may not have thought 1000.05s - 1002.85s | that you don't actually get to pick that key. 1002.85s - 1006.17s | Generally speaking, these keys fall into two categories, 1006.17s - 1010.63s | and that's shared master keys and custom master keys. 1010.63s - 1012.45s | So, with a shared master key, 1012.45s - 1014.29s | these are cards and readers 1014.29s - 1016.75s | that are interoperable by default. 1016.75s - 1019.01s | You buy the card, you buy the reader, and it just works. 1019.01s - 1019.85s | It's great. 1019.85s - 1020.93s | It's great for integrators. 1020.93s - 1022.53s | It's great for customers. 1022.53s - 1024.37s | It's really fast and easy to install, 1024.37s - 1026.13s | and of course, because it's so easy, 1026.13s - 1027.95s | that means your cost is lower. 1027.95s - 1030.91s | But maybe you got special security needs 1030.91s - 1033.19s | and you want a custom key, 1033.19s - 1035.83s | and so now a unique key is generated for you, 1035.83s - 1036.99s | and someone has to manage it. 1036.99s - 1039.31s | Maybe it's you, maybe it's your vendor. 1039.31s - 1041.47s | And of course, if you do that, though, 1041.47s - 1044.79s | now you need to order those cards and those credentials 1044.79s - 1047.11s | and those readers on demand. 1047.11s - 1049.35s |


chunk_id: 206_chunk_24
chunk_text:
shared master keys and custom master keys. 1010.63s - 1012.45s | So, with a shared master key, 1012.45s - 1014.29s | these are cards and readers 1014.29s - 1016.75s | that are interoperable by default. 1016.75s - 1019.01s | You buy the card, you buy the reader, and it just works. 1019.01s - 1019.85s | It's great. 1019.85s - 1020.93s | It's great for integrators. 1020.93s - 1022.53s | It's great for customers. 1022.53s - 1024.37s | It's really fast and easy to install, 1024.37s - 1026.13s | and of course, because it's so easy, 1026.13s - 1027.95s | that means your cost is lower. 1027.95s - 1030.91s | But maybe you got special security needs 1030.91s - 1033.19s | and you want a custom key, 1033.19s - 1035.83s | and so now a unique key is generated for you, 1035.83s - 1036.99s | and someone has to manage it. 1036.99s - 1039.31s | Maybe it's you, maybe it's your vendor. 1039.31s - 1041.47s | And of course, if you do that, though, 1041.47s - 1044.79s | now you need to order those cards and those credentials 1044.79s - 1047.11s | and those readers on demand. 1047.11s - 1049.35s | They have to program specifically for you. 1049.35s - 1051.23s | Because of this extra step, 1051.23s - 1053.03s | this is a process and a technology 1053.03s - 1055.55s | that is kind of poorly understood. 1055.55s - 1058.19s | A lot of integrators don't really like to do this 1058.19s - 1060.59s | because it kind of gets in the way of the process. 1060.59s - 1064.03s | It's something that's confusing for a lot of customers. 1064.03s - 1067.11s | And ultimately, it really slows down the process as well, 1067.11s - 1068.91s | which people, of course, don't like. 1069.99s - 1071.31s | But no matter what you do, 1071.31s - 1073.91s | whether you use unauthenticated credentials 1073.91s - 1075.47s | or authenticated credentials, 1075.47s - 1077.95s | or ones with encryption, whenever it is, 1077.95s - 1081.31s | the reader still outputs WeGand, 1081.31s - 1083.35s | which is really interesting. 1083.39s - 1086.71s | But we're not gonna get too far down that path today. 1086.71s - 1088.27s | Before we continue further, 1088.27s - 1092.19s | we wanted to share with you a little bit of context. 1092.19s - 1093.83s | As


chunk_id: 206_chunk_25
chunk_text:
They have to program specifically for you. 1049.35s - 1051.23s | Because of this extra step, 1051.23s - 1053.03s | this is a process and a technology 1053.03s - 1055.55s | that is kind of poorly understood. 1055.55s - 1058.19s | A lot of integrators don't really like to do this 1058.19s - 1060.59s | because it kind of gets in the way of the process. 1060.59s - 1064.03s | It's something that's confusing for a lot of customers. 1064.03s - 1067.11s | And ultimately, it really slows down the process as well, 1067.11s - 1068.91s | which people, of course, don't like. 1069.99s - 1071.31s | But no matter what you do, 1071.31s - 1073.91s | whether you use unauthenticated credentials 1073.91s - 1075.47s | or authenticated credentials, 1075.47s - 1077.95s | or ones with encryption, whenever it is, 1077.95s - 1081.31s | the reader still outputs WeGand, 1081.31s - 1083.35s | which is really interesting. 1083.39s - 1086.71s | But we're not gonna get too far down that path today. 1086.71s - 1088.27s | Before we continue further, 1088.27s - 1092.19s | we wanted to share with you a little bit of context. 1092.19s - 1093.83s | As any of you guys know, 1093.83s - 1096.39s | who've ever learned any of this stuff, 1096.39s - 1099.39s | played with anything, done anything even remotely hackery, 1099.39s - 1102.35s | we all stand on the shoulders of giants before us 1102.35s - 1106.63s | that have paved the way before for us to learn from 1106.63s - 1108.31s | and then build on top of that. 1108.31s - 1110.03s | And this is no exception. 1110.03s - 1113.83s | In our opinion, one of the big pieces of research 1113.83s - 1115.79s | that really kind of set us on this path 1115.79s - 1120.11s | started back in 2011, 2010 rather, 1120.11s - 1124.39s | when Milos released his paper, Heart of Darkness. 1124.39s - 1127.43s | And it was one of the first really interesting ways 1127.43s - 1130.55s | of compromising sensitive cryptographic key material 1130.55s - 1133.15s | that was supposed to be kept secure in the reader 1133.15s - 1137.03s | and doing it in a really, really innovative way. 1137.03s - 1139.47s | Nick, what do you wanna say about this? 1144.10s - 1147.54s | Yeah, so the predecessor to the system


chunk_id: 206_chunk_26
chunk_text:
any of you guys know, 1093.83s - 1096.39s | who've ever learned any of this stuff, 1096.39s - 1099.39s | played with anything, done anything even remotely hackery, 1099.39s - 1102.35s | we all stand on the shoulders of giants before us 1102.35s - 1106.63s | that have paved the way before for us to learn from 1106.63s - 1108.31s | and then build on top of that. 1108.31s - 1110.03s | And this is no exception. 1110.03s - 1113.83s | In our opinion, one of the big pieces of research 1113.83s - 1115.79s | that really kind of set us on this path 1115.79s - 1120.11s | started back in 2011, 2010 rather, 1120.11s - 1124.39s | when Milos released his paper, Heart of Darkness. 1124.39s - 1127.43s | And it was one of the first really interesting ways 1127.43s - 1130.55s | of compromising sensitive cryptographic key material 1130.55s - 1133.15s | that was supposed to be kept secure in the reader 1133.15s - 1137.03s | and doing it in a really, really innovative way. 1137.03s - 1139.47s | Nick, what do you wanna say about this? 1144.10s - 1147.54s | Yeah, so the predecessor to the system 1147.54s - 1150.06s | that we're gonna talk about today, iClass, 1150.06s - 1152.58s | was introduced in 2002. 1152.58s - 1156.22s | And for quite a while, it was a relatively secure system. 1156.22s - 1157.74s | It used a modern credential. 1157.74s - 1162.74s | It had authentication keys. 1162.74s - 1164.50s | It had encryption keys. 1164.50s - 1166.58s | It was a relatively secure implementation. 1166.58s - 1170.66s | But use of cheaper hardware 1170.66s - 1173.18s | and inadequate key protection 1173.54s - 1176.14s | ultimately led to the recovery of those keys 1176.14s - 1177.90s | that made the system secure. 1177.90s - 1181.34s | So it was originally based on an inside-secure 1181.34s - 1185.50s | or inside-contactless at the time PicoPath chip. 1185.50s - 1189.62s | And it was mainly popular in North America. 1189.62s - 1191.50s | It saw some penetration in other markets, 1191.50s - 1193.78s | but it was primarily in North America. 1195.22s - 1197.38s | iClass legacy credential looks like this 1197.38s - 1199.66s | from a memory map perspective. 1199.66s - 1202.86s | There are unencrypted variants or encrypted variants. 1203.54s - 1205.74s | And funnily


chunk_id: 206_chunk_27
chunk_text:
1147.54s - 1150.06s | that we're gonna talk about today, iClass, 1150.06s - 1152.58s | was introduced in 2002. 1152.58s - 1156.22s | And for quite a while, it was a relatively secure system. 1156.22s - 1157.74s | It used a modern credential. 1157.74s - 1162.74s | It had authentication keys. 1162.74s - 1164.50s | It had encryption keys. 1164.50s - 1166.58s | It was a relatively secure implementation. 1166.58s - 1170.66s | But use of cheaper hardware 1170.66s - 1173.18s | and inadequate key protection 1173.54s - 1176.14s | ultimately led to the recovery of those keys 1176.14s - 1177.90s | that made the system secure. 1177.90s - 1181.34s | So it was originally based on an inside-secure 1181.34s - 1185.50s | or inside-contactless at the time PicoPath chip. 1185.50s - 1189.62s | And it was mainly popular in North America. 1189.62s - 1191.50s | It saw some penetration in other markets, 1191.50s - 1193.78s | but it was primarily in North America. 1195.22s - 1197.38s | iClass legacy credential looks like this 1197.38s - 1199.66s | from a memory map perspective. 1199.66s - 1202.86s | There are unencrypted variants or encrypted variants. 1203.54s - 1205.74s | And funnily enough, the credential itself 1205.74s - 1207.90s | or the card itself controls whether or not 1207.90s - 1210.58s | it's encrypted or plain text. 1214.30s - 1215.66s | Nope, it's gonna switch on. 1216.70s - 1217.82s | Yeah, so. 1219.18s - 1220.78s | It's all right. 1220.78s - 1221.62s | Yeah. 1222.78s - 1225.94s | So you see like two examples here 1225.94s - 1228.90s | of an encrypted card and an unencrypted card. 1228.90s - 1232.14s | Suffice to say that having the credential itself 1232.14s - 1233.78s | specify whether it's encrypted or not 1233.78s - 1235.50s | might not be the best idea. 1235.50s - 1237.78s | But the hardware for this ecosystem 1237.78s - 1239.30s | was a few different revisions. 1239.30s - 1241.10s | There was Rev A, B, and C. 1241.10s - 1244.70s | B really wasn't in the channel very long. 1244.70s - 1247.38s | There's not a lot of customers with Rev B readers. 1247.38s - 1251.02s | But Milosz selected Rev A readers as a target 1251.02s - 1252.46s | because it's the earlier generation. 1252.46s - 1254.42s | There might be some bugs. 1254.42s - 1256.54s | That's a


chunk_id: 206_chunk_28
chunk_text:
enough, the credential itself 1205.74s - 1207.90s | or the card itself controls whether or not 1207.90s - 1210.58s | it's encrypted or plain text. 1214.30s - 1215.66s | Nope, it's gonna switch on. 1216.70s - 1217.82s | Yeah, so. 1219.18s - 1220.78s | It's all right. 1220.78s - 1221.62s | Yeah. 1222.78s - 1225.94s | So you see like two examples here 1225.94s - 1228.90s | of an encrypted card and an unencrypted card. 1228.90s - 1232.14s | Suffice to say that having the credential itself 1232.14s - 1233.78s | specify whether it's encrypted or not 1233.78s - 1235.50s | might not be the best idea. 1235.50s - 1237.78s | But the hardware for this ecosystem 1237.78s - 1239.30s | was a few different revisions. 1239.30s - 1241.10s | There was Rev A, B, and C. 1241.10s - 1244.70s | B really wasn't in the channel very long. 1244.70s - 1247.38s | There's not a lot of customers with Rev B readers. 1247.38s - 1251.02s | But Milosz selected Rev A readers as a target 1251.02s - 1252.46s | because it's the earlier generation. 1252.46s - 1254.42s | There might be some bugs. 1254.42s - 1256.54s | That's a typical thing for hardware hackers to do 1256.54s - 1258.70s | is select an earlier revision. 1258.74s - 1263.66s | Milosz used a relative commodity PIC microcontroller, 1263.66s - 1268.66s | which was not hard against attacks that Milosz performed. 1268.70s - 1272.06s | So when I-Class was introduced, 1272.06s - 1275.46s | this is where the concept of the shared standard keys 1275.46s - 1280.10s | and what the vendor calls elite keys was introduced. 1280.10s - 1283.14s | So most customers went with a standard key option. 1283.14s - 1286.46s | Elite keys were for customers that had 1286.50s - 1289.18s | or were concerned about advanced threats 1289.18s - 1291.90s | so that their cards wouldn't work on other readers 1291.90s - 1293.58s | and vice versa. 1293.58s - 1297.26s | So those cards and readers are built to order. 1297.26s - 1299.10s | Customers don't actually get to choose that key. 1299.10s - 1300.22s | It's chosen for you. 1300.22s - 1301.98s | There's some good research about that 1301.98s - 1303.62s | we'll talk about later. 1303.62s - 1306.90s | But it was, elite is probably one of the, 1306.90s - 1311.54s | if not


chunk_id: 206_chunk_29
chunk_text:
typical thing for hardware hackers to do 1256.54s - 1258.70s | is select an earlier revision. 1258.74s - 1263.66s | Milosz used a relative commodity PIC microcontroller, 1263.66s - 1268.66s | which was not hard against attacks that Milosz performed. 1268.70s - 1272.06s | So when I-Class was introduced, 1272.06s - 1275.46s | this is where the concept of the shared standard keys 1275.46s - 1280.10s | and what the vendor calls elite keys was introduced. 1280.10s - 1283.14s | So most customers went with a standard key option. 1283.14s - 1286.46s | Elite keys were for customers that had 1286.50s - 1289.18s | or were concerned about advanced threats 1289.18s - 1291.90s | so that their cards wouldn't work on other readers 1291.90s - 1293.58s | and vice versa. 1293.58s - 1297.26s | So those cards and readers are built to order. 1297.26s - 1299.10s | Customers don't actually get to choose that key. 1299.10s - 1300.22s | It's chosen for you. 1300.22s - 1301.98s | There's some good research about that 1301.98s - 1303.62s | we'll talk about later. 1303.62s - 1306.90s | But it was, elite is probably one of the, 1306.90s - 1311.54s | if not the most prominent vendor-managed key program 1311.54s - 1314.86s | that exists in the access control space. 1314.86s - 1319.86s | So in this ecosystem, there was an encoder, 1320.34s - 1322.82s | and that encoder had some use cases 1322.82s - 1327.58s | for stored value applications, vending, things like that. 1327.58s - 1330.10s | And it was just another reader that had an interface 1330.10s - 1331.78s | that you could connect to with your PC 1331.78s - 1333.86s | and talk to it with a protocol. 1333.86s - 1336.86s | But this is what Milosz targeted for his research. 1336.86s - 1341.22s | And his research, the paper's titled Heart of Darkness, 1341.22s - 1343.66s | it relied on using two readers. 1343.66s - 1346.46s | It was a destructive attack against each one. 1346.46s - 1350.78s | With the first reader, you would erase the boot block 1350.78s - 1353.18s | because the debug interface would let you do 1353.18s - 1354.42s | some limited things. 1354.42s - 1356.98s | And in that erased boot block, 1356.98s - 1361.34s | he wrote a dumper program to dump the rest of the memory. 1361.34s - 1364.98s |


chunk_id: 206_chunk_30
chunk_text:
the most prominent vendor-managed key program 1311.54s - 1314.86s | that exists in the access control space. 1314.86s - 1319.86s | So in this ecosystem, there was an encoder, 1320.34s - 1322.82s | and that encoder had some use cases 1322.82s - 1327.58s | for stored value applications, vending, things like that. 1327.58s - 1330.10s | And it was just another reader that had an interface 1330.10s - 1331.78s | that you could connect to with your PC 1331.78s - 1333.86s | and talk to it with a protocol. 1333.86s - 1336.86s | But this is what Milosz targeted for his research. 1336.86s - 1341.22s | And his research, the paper's titled Heart of Darkness, 1341.22s - 1343.66s | it relied on using two readers. 1343.66s - 1346.46s | It was a destructive attack against each one. 1346.46s - 1350.78s | With the first reader, you would erase the boot block 1350.78s - 1353.18s | because the debug interface would let you do 1353.18s - 1354.42s | some limited things. 1354.42s - 1356.98s | And in that erased boot block, 1356.98s - 1361.34s | he wrote a dumper program to dump the rest of the memory. 1361.34s - 1364.98s | And then on the second reader, he did the opposite. 1364.98s - 1367.82s | He erased the end part of the memory 1367.82s - 1370.42s | and wrote the dumper program at the very end, 1370.42s - 1372.22s | which then looped back around 1372.22s - 1373.78s | and got the first bit that he didn't have 1373.78s - 1375.10s | from the first reader. 1375.10s - 1378.82s | So this led to a complete recovery of the firmware 1378.82s - 1382.10s | and all associated data with that system. 1382.10s - 1385.50s | Let's see if this might, oh, way too loud this time. 1385.50s - 1388.26s | All right, just a quick add. 1388.26s - 1391.58s | One thing that I found really cool about this attack 1391.58s - 1394.82s | is that this chip technically had read protection. 1394.82s - 1397.74s | So they thought the keys were secure, 1397.74s - 1401.26s | but he found a very innovative way to get his code 1401.30s - 1405.42s | to run inside the chip without erasing the rest of it. 1405.42s - 1408.38s | And he found, quite by accident, 1408.38s - 1411.54s | that code running inside


chunk_id: 206_chunk_31
chunk_text:
And then on the second reader, he did the opposite. 1364.98s - 1367.82s | He erased the end part of the memory 1367.82s - 1370.42s | and wrote the dumper program at the very end, 1370.42s - 1372.22s | which then looped back around 1372.22s - 1373.78s | and got the first bit that he didn't have 1373.78s - 1375.10s | from the first reader. 1375.10s - 1378.82s | So this led to a complete recovery of the firmware 1378.82s - 1382.10s | and all associated data with that system. 1382.10s - 1385.50s | Let's see if this might, oh, way too loud this time. 1385.50s - 1388.26s | All right, just a quick add. 1388.26s - 1391.58s | One thing that I found really cool about this attack 1391.58s - 1394.82s | is that this chip technically had read protection. 1394.82s - 1397.74s | So they thought the keys were secure, 1397.74s - 1401.26s | but he found a very innovative way to get his code 1401.30s - 1405.42s | to run inside the chip without erasing the rest of it. 1405.42s - 1408.38s | And he found, quite by accident, 1408.38s - 1411.54s | that code running inside the microprocessor 1411.54s - 1413.94s | was kind of behind the firewall, so to speak. 1413.94s - 1415.94s | And so it was able to then get access 1415.94s - 1418.06s | to those re-protected areas of memory. 1418.06s - 1420.78s | And that basic concept of, 1420.78s - 1422.98s | I don't have access to that thing, 1422.98s - 1424.70s | so I'm gonna find something else 1424.70s - 1426.14s | that has access to that thing 1426.14s - 1428.30s | and try to manipulate my way in, 1428.30s - 1431.66s | that is so critical to so many different aspects of hacking. 1431.66s - 1433.02s | Yeah, exactly. 1433.02s - 1437.54s | So once you actually have that extracted firmware and data, 1437.54s - 1439.50s | you can start to look through it. 1439.50s - 1441.42s | You kind of have broken the chain of custody. 1441.42s - 1444.86s | You now have those keys that were meant to be kept secret. 1444.86s - 1448.30s | And through analysis, it ultimately revealed 1448.30s - 1451.42s | the algorithms that were used by the platform. 1451.42s - 1453.62s | It prompted a lot of subsequent research 1453.62s - 1455.18s


chunk_id: 206_chunk_32
chunk_text:
the microprocessor 1411.54s - 1413.94s | was kind of behind the firewall, so to speak. 1413.94s - 1415.94s | And so it was able to then get access 1415.94s - 1418.06s | to those re-protected areas of memory. 1418.06s - 1420.78s | And that basic concept of, 1420.78s - 1422.98s | I don't have access to that thing, 1422.98s - 1424.70s | so I'm gonna find something else 1424.70s - 1426.14s | that has access to that thing 1426.14s - 1428.30s | and try to manipulate my way in, 1428.30s - 1431.66s | that is so critical to so many different aspects of hacking. 1431.66s - 1433.02s | Yeah, exactly. 1433.02s - 1437.54s | So once you actually have that extracted firmware and data, 1437.54s - 1439.50s | you can start to look through it. 1439.50s - 1441.42s | You kind of have broken the chain of custody. 1441.42s - 1444.86s | You now have those keys that were meant to be kept secret. 1444.86s - 1448.30s | And through analysis, it ultimately revealed 1448.30s - 1451.42s | the algorithms that were used by the platform. 1451.42s - 1453.62s | It prompted a lot of subsequent research 1453.62s - 1455.18s | over the next couple of years, 1455.18s - 1458.94s | and primarily by a handful of European researchers. 1458.94s - 1463.30s | There are some really interesting cryptanalysis talks. 1463.30s - 1466.02s | There's a few of the papers that are listed here. 1466.02s - 1467.42s | Fantastic reads. 1467.42s - 1469.42s | These are deep, math-heavy papers, 1469.42s - 1482.34s | so I'll be frank, it's over my head a lot of the time. 1482.34s - 1484.38s | Testing one, two, there we go. 1484.38s - 1487.62s | So yeah, this is truly next-level research. 1487.62s - 1490.10s | And from a failure perspective, 1490.10s - 1491.98s | choosing a commodity microcontroller, 1492.02s - 1494.18s | even with reprotection, 1494.18s - 1497.86s | is not necessarily the proper key protection mechanism 1497.86s - 1499.14s | that you'd want for a system like this, 1499.14s - 1501.58s | especially if you've got standard or shared keys 1501.58s - 1505.98s | across all sorts of customers, potentially globally. 1505.98s - 1510.98s | So with the data integrity portion of this, 1511.26s - 1513.50s | it being optional and controlled by the card, 1513.50s - 1516.86s | also maybe not the


chunk_id: 206_chunk_33
chunk_text:
| over the next couple of years, 1455.18s - 1458.94s | and primarily by a handful of European researchers. 1458.94s - 1463.30s | There are some really interesting cryptanalysis talks. 1463.30s - 1466.02s | There's a few of the papers that are listed here. 1466.02s - 1467.42s | Fantastic reads. 1467.42s - 1469.42s | These are deep, math-heavy papers, 1469.42s - 1482.34s | so I'll be frank, it's over my head a lot of the time. 1482.34s - 1484.38s | Testing one, two, there we go. 1484.38s - 1487.62s | So yeah, this is truly next-level research. 1487.62s - 1490.10s | And from a failure perspective, 1490.10s - 1491.98s | choosing a commodity microcontroller, 1492.02s - 1494.18s | even with reprotection, 1494.18s - 1497.86s | is not necessarily the proper key protection mechanism 1497.86s - 1499.14s | that you'd want for a system like this, 1499.14s - 1501.58s | especially if you've got standard or shared keys 1501.58s - 1505.98s | across all sorts of customers, potentially globally. 1505.98s - 1510.98s | So with the data integrity portion of this, 1511.26s - 1513.50s | it being optional and controlled by the card, 1513.50s - 1516.86s | also maybe not the best security decision. 1516.86s - 1518.66s | If customers want encryption, 1518.66s - 1520.10s | they should be able to specify that on the reader, 1520.10s - 1521.46s | not the credential. 1522.42s - 1527.42s | And one other issue that plagues this platform, 1527.54s - 1530.94s | not just this vendor, but just in this industry as a whole, 1530.94s - 1534.74s | is firmware upgrades or updating devices in the field. 1534.74s - 1538.18s | If you take these readers and they're at your doors, 1538.18s - 1540.14s | if you have five doors, it's not much of a problem, 1540.14s - 1542.90s | but if you have 50,000 doors with readers 1542.90s - 1545.06s | that are spread out across the globe, 1545.06s - 1545.98s | if you wanna update those 1545.98s - 1547.74s | and you have to go to each one of them, 1547.74s - 1549.30s | that's quite the task. 1549.30s - 1552.10s | So centralized updates are an issue 1552.10s - 1553.58s | just kind of industry-wide 1553.58s - 1556.54s | that we're hoping to get some attention on 1556.54s - 1558.58s | in the next couple of years, 1558.58s - 1560.94s |


chunk_id: 206_chunk_34
chunk_text:
best security decision. 1516.86s - 1518.66s | If customers want encryption, 1518.66s - 1520.10s | they should be able to specify that on the reader, 1520.10s - 1521.46s | not the credential. 1522.42s - 1527.42s | And one other issue that plagues this platform, 1527.54s - 1530.94s | not just this vendor, but just in this industry as a whole, 1530.94s - 1534.74s | is firmware upgrades or updating devices in the field. 1534.74s - 1538.18s | If you take these readers and they're at your doors, 1538.18s - 1540.14s | if you have five doors, it's not much of a problem, 1540.14s - 1542.90s | but if you have 50,000 doors with readers 1542.90s - 1545.06s | that are spread out across the globe, 1545.06s - 1545.98s | if you wanna update those 1545.98s - 1547.74s | and you have to go to each one of them, 1547.74s - 1549.30s | that's quite the task. 1549.30s - 1552.10s | So centralized updates are an issue 1552.10s - 1553.58s | just kind of industry-wide 1553.58s - 1556.54s | that we're hoping to get some attention on 1556.54s - 1558.58s | in the next couple of years, 1558.58s - 1560.94s | product advancements and whatnot. 1560.94s - 1562.82s | And I think one of the really interesting things 1562.82s - 1564.34s | to understand and take away from this, 1564.34s - 1567.82s | if you're not familiar with any of this technology already, 1567.82s - 1572.82s | is that even though they had this encryption layer 1572.90s - 1576.70s | on there as well, what people found 1576.70s - 1579.02s | is that once you have the authentication key, 1579.74s - 1582.30s | you didn't even have to decrypt it in order to clone it 1582.30s - 1584.30s | because there was no validation 1584.30s - 1587.94s | of which card that data belonged to. 1587.94s - 1590.54s | So you could actually just take one card, 1590.54s - 1593.94s | unlock it, grab the encrypted blob of data, 1593.94s - 1595.22s | throw it onto another one, 1595.22s - 1598.78s | and even though the serial number of that card was different, 1598.78s - 1600.90s | it would still work, 1600.90s - 1603.78s | which really kind of undermined 1603.78s - 1605.10s | a lot of the integrity of the data. 1605.10s - 1607.18s | So when we talk about


chunk_id: 206_chunk_35
chunk_text:
product advancements and whatnot. 1560.94s - 1562.82s | And I think one of the really interesting things 1562.82s - 1564.34s | to understand and take away from this, 1564.34s - 1567.82s | if you're not familiar with any of this technology already, 1567.82s - 1572.82s | is that even though they had this encryption layer 1572.90s - 1576.70s | on there as well, what people found 1576.70s - 1579.02s | is that once you have the authentication key, 1579.74s - 1582.30s | you didn't even have to decrypt it in order to clone it 1582.30s - 1584.30s | because there was no validation 1584.30s - 1587.94s | of which card that data belonged to. 1587.94s - 1590.54s | So you could actually just take one card, 1590.54s - 1593.94s | unlock it, grab the encrypted blob of data, 1593.94s - 1595.22s | throw it onto another one, 1595.22s - 1598.78s | and even though the serial number of that card was different, 1598.78s - 1600.90s | it would still work, 1600.90s - 1603.78s | which really kind of undermined 1603.78s - 1605.10s | a lot of the integrity of the data. 1605.10s - 1607.18s | So when we talk about data tampering, 1607.18s - 1609.54s | that's what we're talking about. 1609.54s - 1611.78s | And it's a critical aspect that you'll see coming up 1611.78s - 1613.18s | as a theme over and over. 1613.18s - 1614.02s | Yep. 1614.02s - 1617.82s | And as a result of this research, 1617.82s - 1621.10s | it actually led to a really cool new platform, 1621.10s - 1623.50s | really the rebirth of iClass. 1623.50s - 1625.58s | And to talk to you about that, 1625.58s - 1644.78s | I'd like to have Aaron come up, if you're willing. 1644.78s - 1647.38s | We have a phoenix rising from the ashes here. 1647.38s - 1650.38s | It's truly a next generation, next level platform. 1651.38s - 1654.30s | Yeah, I mean, if it looks a little bit dramatic, 1654.30s - 1656.66s | it's because in many ways you could argue 1656.66s - 1660.02s | that that original platform really kind of 1660.02s - 1662.54s | got burned down in a lot of ways. 1662.54s - 1667.26s | But to HID's credit, they actually came back pretty hard. 1667.26s - 1671.74s | And when SE came out, it was kind of a


chunk_id: 206_chunk_36
chunk_text:
data tampering, 1607.18s - 1609.54s | that's what we're talking about. 1609.54s - 1611.78s | And it's a critical aspect that you'll see coming up 1611.78s - 1613.18s | as a theme over and over. 1613.18s - 1614.02s | Yep. 1614.02s - 1617.82s | And as a result of this research, 1617.82s - 1621.10s | it actually led to a really cool new platform, 1621.10s - 1623.50s | really the rebirth of iClass. 1623.50s - 1625.58s | And to talk to you about that, 1625.58s - 1644.78s | I'd like to have Aaron come up, if you're willing. 1644.78s - 1647.38s | We have a phoenix rising from the ashes here. 1647.38s - 1650.38s | It's truly a next generation, next level platform. 1651.38s - 1654.30s | Yeah, I mean, if it looks a little bit dramatic, 1654.30s - 1656.66s | it's because in many ways you could argue 1656.66s - 1660.02s | that that original platform really kind of 1660.02s - 1662.54s | got burned down in a lot of ways. 1662.54s - 1667.26s | But to HID's credit, they actually came back pretty hard. 1667.26s - 1671.74s | And when SE came out, it was kind of a BFD. 1671.74s - 1672.82s | Aaron, tell us about it. 1672.82s - 1677.82s | Sure, so to replace iClass comes iClass SE. 1681.14s - 1683.06s | Launched in 2011. 1683.06s - 1687.18s | Technically it stands for SIO enabled. 1687.18s - 1689.22s | SIO stands for secure identity objects. 1689.22s - 1693.58s | Yes, nested, a lot of confusing terminology here. 1693.58s - 1696.66s | But in short, they got a lot of things right here, right? 1697.54s - 1700.86s | They, you know, HID clearly learned a lot of lessons 1700.86s - 1702.66s | of things that went wrong with iClass. 1702.66s - 1705.50s | And so iClass SE really was, you know, 1705.50s - 1709.30s | arguably the secure edition, right, of the platform. 1711.22s - 1714.14s | So it can, you know, this name, iClass SE, 1714.14s - 1716.78s | refers to three different things. 1716.78s - 1720.62s | A platform, a reader, a credential technology. 1720.62s - 1723.58s | There's a lot, you can see how that might be confusing, 1723.58s - 1726.66s | right, and it has been, right. 1726.66s - 1730.65s | To this day. 1730.65s - 1732.09s | Oh, try that, there you


chunk_id: 206_chunk_37
chunk_text:
BFD. 1671.74s - 1672.82s | Aaron, tell us about it. 1672.82s - 1677.82s | Sure, so to replace iClass comes iClass SE. 1681.14s - 1683.06s | Launched in 2011. 1683.06s - 1687.18s | Technically it stands for SIO enabled. 1687.18s - 1689.22s | SIO stands for secure identity objects. 1689.22s - 1693.58s | Yes, nested, a lot of confusing terminology here. 1693.58s - 1696.66s | But in short, they got a lot of things right here, right? 1697.54s - 1700.86s | They, you know, HID clearly learned a lot of lessons 1700.86s - 1702.66s | of things that went wrong with iClass. 1702.66s - 1705.50s | And so iClass SE really was, you know, 1705.50s - 1709.30s | arguably the secure edition, right, of the platform. 1711.22s - 1714.14s | So it can, you know, this name, iClass SE, 1714.14s - 1716.78s | refers to three different things. 1716.78s - 1720.62s | A platform, a reader, a credential technology. 1720.62s - 1723.58s | There's a lot, you can see how that might be confusing, 1723.58s - 1726.66s | right, and it has been, right. 1726.66s - 1730.65s | To this day. 1730.65s - 1732.09s | Oh, try that, there you go. 1732.09s - 1734.97s | To this day, there is still an incredible amount 1734.97s - 1739.73s | of confusion over what iClass SE actually means. 1739.73s - 1742.21s | And I don't mean just from like everyday users. 1742.21s - 1745.09s | I mean industry professionals, people who, 1745.09s - 1748.53s | this is their job, nothing but access control. 1748.53s - 1751.61s | Selling it, installing it, maintaining it. 1751.61s - 1755.45s | The phrase iClass SE is very, very nebulous. 1755.45s - 1757.13s | But when you look at it at a technical level, 1757.13s - 1759.57s | you can understand why there's so much confusion 1759.57s - 1762.13s | because they reuse the same name 1762.13s - 1766.41s | for very different discrete aspects of the technology. 1766.41s - 1769.53s | So we do our best to separate things out here for you, 1769.53s - 1771.37s | but it's important to understand 1771.37s - 1773.65s | that depending on the context 1773.65s - 1776.45s | in which you invoke the phrase iClass SE, 1776.45s - 1778.61s | what we're referring to can vary. 1780.37s - 1784.53s | Indeed, and so one of the interesting things 1784.53s


chunk_id: 206_chunk_38
chunk_text:
go. 1732.09s - 1734.97s | To this day, there is still an incredible amount 1734.97s - 1739.73s | of confusion over what iClass SE actually means. 1739.73s - 1742.21s | And I don't mean just from like everyday users. 1742.21s - 1745.09s | I mean industry professionals, people who, 1745.09s - 1748.53s | this is their job, nothing but access control. 1748.53s - 1751.61s | Selling it, installing it, maintaining it. 1751.61s - 1755.45s | The phrase iClass SE is very, very nebulous. 1755.45s - 1757.13s | But when you look at it at a technical level, 1757.13s - 1759.57s | you can understand why there's so much confusion 1759.57s - 1762.13s | because they reuse the same name 1762.13s - 1766.41s | for very different discrete aspects of the technology. 1766.41s - 1769.53s | So we do our best to separate things out here for you, 1769.53s - 1771.37s | but it's important to understand 1771.37s - 1773.65s | that depending on the context 1773.65s - 1776.45s | in which you invoke the phrase iClass SE, 1776.45s - 1778.61s | what we're referring to can vary. 1780.37s - 1784.53s | Indeed, and so one of the interesting things 1784.53s - 1787.85s | about iClass SE as a reader platform. 1789.45s - 1790.85s | Closer to the mic. 1790.85s - 1792.61s | One of the interesting things about iClass SE 1792.61s - 1797.13s | as a reader platform is that it is very much upgradable. 1797.13s - 1799.41s | And so, you know, they've added support over the years 1799.41s - 1802.97s | for newer, other credential technologies, right? 1802.97s - 1804.49s | Something that was not easily possible 1804.49s - 1806.93s | with the original iClass reader platform. 1806.93s - 1809.37s | So right in 2011, right, we had, you know, 1809.37s - 1812.73s | those four, iClass SE most significantly. 1812.73s - 1815.85s | 2012, we got SEOS, which we'll talk about later. 1815.85s - 1818.97s | 2014, mobile, and so on and so forth. 1820.93s - 1823.73s | You know, so I mentioned that term before, 1823.73s - 1825.33s | SIO, secure identity object. 1825.33s - 1827.63s | So let's talk a little bit about what that is. 1828.63s - 1832.51s | So with iClass, right, you know, 1832.51s - 1835.75s | one of the things that Bobak was talking about 1835.75s - 1837.63s | and Nick


chunk_id: 206_chunk_39
chunk_text:
- 1787.85s | about iClass SE as a reader platform. 1789.45s - 1790.85s | Closer to the mic. 1790.85s - 1792.61s | One of the interesting things about iClass SE 1792.61s - 1797.13s | as a reader platform is that it is very much upgradable. 1797.13s - 1799.41s | And so, you know, they've added support over the years 1799.41s - 1802.97s | for newer, other credential technologies, right? 1802.97s - 1804.49s | Something that was not easily possible 1804.49s - 1806.93s | with the original iClass reader platform. 1806.93s - 1809.37s | So right in 2011, right, we had, you know, 1809.37s - 1812.73s | those four, iClass SE most significantly. 1812.73s - 1815.85s | 2012, we got SEOS, which we'll talk about later. 1815.85s - 1818.97s | 2014, mobile, and so on and so forth. 1820.93s - 1823.73s | You know, so I mentioned that term before, 1823.73s - 1825.33s | SIO, secure identity object. 1825.33s - 1827.63s | So let's talk a little bit about what that is. 1828.63s - 1832.51s | So with iClass, right, you know, 1832.51s - 1835.75s | one of the things that Bobak was talking about 1835.75s - 1837.63s | and Nick as well was the fact 1837.63s - 1841.03s | that there was nothing to cryptographically bind 1841.03s - 1843.23s | the encrypted data payload on the card 1843.23s - 1845.55s | to that particular card. 1845.55s - 1847.39s | And that's one of the main things 1847.39s - 1850.67s | that the SIO endeavors to fix, right? 1850.67s - 1855.07s | So it is an ASN.1 encoded payload. 1855.19s - 1858.23s | It is cryptographically bound to a specific card, right, 1858.23s - 1860.67s | by its serial number or UID, 1860.67s - 1862.23s | and the data in it is encrypted. 1862.23s - 1867.23s | So in other words, if you take an SIO from one card 1867.35s - 1868.47s | and you put it on another card 1868.47s - 1871.63s | with a different serial number, it won't work. 1871.63s - 1873.11s | And that's a big deal, right? 1873.11s - 1876.87s | Like that's a big step forward in terms of the security 1876.87s - 1881.87s | of the SIO-based credential technology, yeah. 1882.71s - 1884.55s | I wanna clarify just in case, 1884.55s - 1887.55s | cause it's easy to get lost in the weeds on


chunk_id: 206_chunk_40
chunk_text:
as well was the fact 1837.63s - 1841.03s | that there was nothing to cryptographically bind 1841.03s - 1843.23s | the encrypted data payload on the card 1843.23s - 1845.55s | to that particular card. 1845.55s - 1847.39s | And that's one of the main things 1847.39s - 1850.67s | that the SIO endeavors to fix, right? 1850.67s - 1855.07s | So it is an ASN.1 encoded payload. 1855.19s - 1858.23s | It is cryptographically bound to a specific card, right, 1858.23s - 1860.67s | by its serial number or UID, 1860.67s - 1862.23s | and the data in it is encrypted. 1862.23s - 1867.23s | So in other words, if you take an SIO from one card 1867.35s - 1868.47s | and you put it on another card 1868.47s - 1871.63s | with a different serial number, it won't work. 1871.63s - 1873.11s | And that's a big deal, right? 1873.11s - 1876.87s | Like that's a big step forward in terms of the security 1876.87s - 1881.87s | of the SIO-based credential technology, yeah. 1882.71s - 1884.55s | I wanna clarify just in case, 1884.55s - 1887.55s | cause it's easy to get lost in the weeds on this 1887.55s - 1889.51s | if it's a new concept to you. 1889.51s - 1894.51s | The main gain of an SIO, a secure object of any kind, 1895.71s - 1898.47s | is not only is the data encrypted, 1898.47s - 1902.71s | but as he mentioned, it's cryptographically bound. 1902.71s - 1906.43s | It's tied to something unique and unchangeable 1906.43s - 1910.07s | about that credential such that if you mess with it, 1910.07s - 1913.55s | if you tamper with it, you change even one bit of data, 1913.55s - 1915.43s | it breaks the signature 1915.43s - 1918.59s | and the reader considers it invalid. 1918.59s - 1923.59s | It's a very important and critical piece of security. 1925.81s - 1927.17s | Indeed. 1927.17s - 1930.53s | So let's talk about the advantages of SIOs. 1930.53s - 1933.45s | So we already spoke a bit about some of this, 1933.45s - 1935.85s | but there's a really good sort of way to think of this, 1935.85s - 1939.81s | which is that an SIO is kind of like a tamper seal, right? 1939.81s - 1942.01s | If you have the card, right, 1942.01s - 1944.33s |


chunk_id: 206_chunk_41
chunk_text:
this 1887.55s - 1889.51s | if it's a new concept to you. 1889.51s - 1894.51s | The main gain of an SIO, a secure object of any kind, 1895.71s - 1898.47s | is not only is the data encrypted, 1898.47s - 1902.71s | but as he mentioned, it's cryptographically bound. 1902.71s - 1906.43s | It's tied to something unique and unchangeable 1906.43s - 1910.07s | about that credential such that if you mess with it, 1910.07s - 1913.55s | if you tamper with it, you change even one bit of data, 1913.55s - 1915.43s | it breaks the signature 1915.43s - 1918.59s | and the reader considers it invalid. 1918.59s - 1923.59s | It's a very important and critical piece of security. 1925.81s - 1927.17s | Indeed. 1927.17s - 1930.53s | So let's talk about the advantages of SIOs. 1930.53s - 1933.45s | So we already spoke a bit about some of this, 1933.45s - 1935.85s | but there's a really good sort of way to think of this, 1935.85s - 1939.81s | which is that an SIO is kind of like a tamper seal, right? 1939.81s - 1942.01s | If you have the card, right, 1942.01s - 1944.33s | and the WGAN's data on the card, 1944.33s - 1949.33s | the SIO is ensuring that, well, 1949.97s - 1951.29s | effectively it's a tamper seal, right? 1951.29s - 1953.65s | You can't tamper with it at all. 1953.65s - 1956.29s | And it's independent of card technology. 1956.29s - 1959.17s | It's a really overall good design. 1962.10s - 1965.54s | So the first major technology, right, 1965.54s - 1969.14s | to talk about with regard to SIOs is I-Class SE, right? 1969.18s - 1974.18s | So it uses the same card technology as I-Class, right, 1975.26s - 1977.70s | which is called PicoPass. 1977.70s - 1980.26s | It was still cost-effective, it was cheap. 1980.26s - 1982.86s | The silicon wasn't broken, right? 1982.86s - 1984.82s | It had good read distance. 1984.82s - 1987.70s | Honestly, a lot of things about I-Class 1987.70s - 1991.18s | as a card technology were good, at least for the time, right? 1992.10s - 1995.38s | So I-Class SE essentially took I-Class 1995.38s - 1998.86s | and made it more or less secure, yeah. 1999.62s - 2000.98s | If you see I-Class credentials, 2000.98s - 2003.30s | you can see an


chunk_id: 206_chunk_42
chunk_text:
and the WGAN's data on the card, 1944.33s - 1949.33s | the SIO is ensuring that, well, 1949.97s - 1951.29s | effectively it's a tamper seal, right? 1951.29s - 1953.65s | You can't tamper with it at all. 1953.65s - 1956.29s | And it's independent of card technology. 1956.29s - 1959.17s | It's a really overall good design. 1962.10s - 1965.54s | So the first major technology, right, 1965.54s - 1969.14s | to talk about with regard to SIOs is I-Class SE, right? 1969.18s - 1974.18s | So it uses the same card technology as I-Class, right, 1975.26s - 1977.70s | which is called PicoPass. 1977.70s - 1980.26s | It was still cost-effective, it was cheap. 1980.26s - 1982.86s | The silicon wasn't broken, right? 1982.86s - 1984.82s | It had good read distance. 1984.82s - 1987.70s | Honestly, a lot of things about I-Class 1987.70s - 1991.18s | as a card technology were good, at least for the time, right? 1992.10s - 1995.38s | So I-Class SE essentially took I-Class 1995.38s - 1998.86s | and made it more or less secure, yeah. 1999.62s - 2000.98s | If you see I-Class credentials, 2000.98s - 2003.30s | you can see an SE or an SR marking 2003.30s - 2006.30s | to indicate that there's an SIO on the card. 2006.30s - 2010.02s | Yeah, this is one of the first places 2010.02s - 2012.62s | where you begin to have that confusion, right? 2012.62s - 2016.74s | We talked about how I-Class SE gets reused over and over. 2016.74s - 2021.30s | So now we're talking about I-Class SE cards specifically. 2021.30s - 2023.98s | So they just took the same card technology 2023.98s - 2027.66s | that they had already, but because their keys were broken 2027.66s - 2030.10s | and their algorithms were broken, yada, yada, yada, 2030.10s - 2031.26s | they say, hey, you know what? 2031.26s - 2033.10s | The container's still not so bad. 2033.10s - 2036.50s | So why don't we just create a new data model 2036.50s - 2038.94s | and change our keys and change our algorithms 2038.94s - 2043.58s | and all those things and basically kind of remix it? 2043.58s - 2045.94s | And it did pretty well. 2047.58s - 2051.84s | Indeed, but let's talk a little bit 2051.84s - 2054.32s | about the limitations of PicoPass, right? 2054.32s -


chunk_id: 206_chunk_43
chunk_text:
SE or an SR marking 2003.30s - 2006.30s | to indicate that there's an SIO on the card. 2006.30s - 2010.02s | Yeah, this is one of the first places 2010.02s - 2012.62s | where you begin to have that confusion, right? 2012.62s - 2016.74s | We talked about how I-Class SE gets reused over and over. 2016.74s - 2021.30s | So now we're talking about I-Class SE cards specifically. 2021.30s - 2023.98s | So they just took the same card technology 2023.98s - 2027.66s | that they had already, but because their keys were broken 2027.66s - 2030.10s | and their algorithms were broken, yada, yada, yada, 2030.10s - 2031.26s | they say, hey, you know what? 2031.26s - 2033.10s | The container's still not so bad. 2033.10s - 2036.50s | So why don't we just create a new data model 2036.50s - 2038.94s | and change our keys and change our algorithms 2038.94s - 2043.58s | and all those things and basically kind of remix it? 2043.58s - 2045.94s | And it did pretty well. 2047.58s - 2051.84s | Indeed, but let's talk a little bit 2051.84s - 2054.32s | about the limitations of PicoPass, right? 2054.32s - 2057.92s | The card technology that I-Class is built on, right? 2057.92s - 2059.24s | It has limited memory. 2060.40s - 2062.92s | You really only have two application areas, 2062.92s - 2065.72s | so you can't have too many different uses, right, 2065.72s - 2067.32s | for an I-Class card. 2067.32s - 2069.32s | It doesn't have replay protection. 2070.28s - 2074.12s | There are a number of bugs in terms of reader firmware 2074.12s - 2076.86s | impacting I-Class and PicoPass specifically. 2078.20s - 2081.36s | More recently, PicoPass became EOL, 2081.36s - 2085.40s | and HID actually had to develop a custom IC 2085.40s - 2087.44s | that emulates PicoPass so they can continue 2087.94s - 2089.04s | to sell I-Class cards. 2090.64s - 2093.68s | Challenges of not owning your whole supply chain, right? 2093.68s - 2095.24s | They bought someone else's chip. 2095.24s - 2097.00s | They said, hey, we're gonna rebrand this, 2097.00s - 2099.84s | call it I-Class, and then eventually 2099.84s - 2101.32s | they stopped making that chip, 2101.32s - 2104.66s | so they had to emulate it, basically. 2105.76s - 2110.76s | Indeed, and actually, NVX discovered 2111.52s - 2114.68s


chunk_id: 206_chunk_44
chunk_text:
2057.92s | The card technology that I-Class is built on, right? 2057.92s - 2059.24s | It has limited memory. 2060.40s - 2062.92s | You really only have two application areas, 2062.92s - 2065.72s | so you can't have too many different uses, right, 2065.72s - 2067.32s | for an I-Class card. 2067.32s - 2069.32s | It doesn't have replay protection. 2070.28s - 2074.12s | There are a number of bugs in terms of reader firmware 2074.12s - 2076.86s | impacting I-Class and PicoPass specifically. 2078.20s - 2081.36s | More recently, PicoPass became EOL, 2081.36s - 2085.40s | and HID actually had to develop a custom IC 2085.40s - 2087.44s | that emulates PicoPass so they can continue 2087.94s - 2089.04s | to sell I-Class cards. 2090.64s - 2093.68s | Challenges of not owning your whole supply chain, right? 2093.68s - 2095.24s | They bought someone else's chip. 2095.24s - 2097.00s | They said, hey, we're gonna rebrand this, 2097.00s - 2099.84s | call it I-Class, and then eventually 2099.84s - 2101.32s | they stopped making that chip, 2101.32s - 2104.66s | so they had to emulate it, basically. 2105.76s - 2110.76s | Indeed, and actually, NVX discovered 2111.52s - 2114.68s | a really interesting implementation defect 2115.40s - 2118.00s | in reader firmware having to do with I-Class 2118.00s - 2119.92s | and is giving a talk called 2119.92s - 2123.08s | I-Class Throwing Away the Keys on Friday. 2123.08s - 2124.40s | That's today. 2124.40s - 2125.76s | Yes, today in our village. 2128.28s - 2129.12s | Yeah, definitely check it out. 2129.12s - 2130.52s | We'll watch the talk, yeah. 2130.52s - 2131.80s | Cool. We're excited. 2131.80s - 2133.84s | So, let's talk about CEOS. 2133.84s - 2137.80s | So, CEOS is that card technology that was shown 2137.80s - 2140.88s | in the initial video at the beginning of the talk. 2140.88s - 2143.72s | It is HID's flagship to this day. 2143.72s - 2144.80s | Launched in 2012. 2144.80s - 2147.88s | Originally, they called it I-Class CEOS, 2147.88s - 2152.56s | which now may be an interesting decision 2152.56s - 2155.92s | because I-Class has certain connotations 2155.92s - 2158.62s | of weakened security, right? 2159.88s - 2162.96s | But at the time, I-Class was a well-established brand name, 2162.96s - 2166.04s | so it helped really sell it to their customer base. 2166.04s


chunk_id: 206_chunk_45
chunk_text:
| a really interesting implementation defect 2115.40s - 2118.00s | in reader firmware having to do with I-Class 2118.00s - 2119.92s | and is giving a talk called 2119.92s - 2123.08s | I-Class Throwing Away the Keys on Friday. 2123.08s - 2124.40s | That's today. 2124.40s - 2125.76s | Yes, today in our village. 2128.28s - 2129.12s | Yeah, definitely check it out. 2129.12s - 2130.52s | We'll watch the talk, yeah. 2130.52s - 2131.80s | Cool. We're excited. 2131.80s - 2133.84s | So, let's talk about CEOS. 2133.84s - 2137.80s | So, CEOS is that card technology that was shown 2137.80s - 2140.88s | in the initial video at the beginning of the talk. 2140.88s - 2143.72s | It is HID's flagship to this day. 2143.72s - 2144.80s | Launched in 2012. 2144.80s - 2147.88s | Originally, they called it I-Class CEOS, 2147.88s - 2152.56s | which now may be an interesting decision 2152.56s - 2155.92s | because I-Class has certain connotations 2155.92s - 2158.62s | of weakened security, right? 2159.88s - 2162.96s | But at the time, I-Class was a well-established brand name, 2162.96s - 2166.04s | so it helped really sell it to their customer base. 2166.04s - 2169.16s | But CEOS, honestly, it gets a lot of stuff right. 2169.36s - 2172.24s | This is a really solid credential technology. 2172.24s - 2174.16s | There's more memory, much better security. 2174.16s - 2176.62s | It's very much standards-based, right? 2176.62s - 2180.76s | You don't have a lot of the proprietary algorithms 2180.76s - 2184.20s | and diversification algorithms and things like that 2184.20s - 2186.04s | that were being done with I-Class 2186.04s - 2187.76s | and previous generations of technologies. 2187.76s - 2190.28s | They made tons of improvements. 2190.28s - 2192.74s | This was like the Rolls-Royce of credentials 2192.74s - 2197.74s | when it came out, and the price reflects that, 2198.02s - 2199.02s | as you can see. 2200.10s - 2202.30s | But it had a lot of cool stuff, 2202.30s - 2207.30s | and it wasn't really big on adoption initially 2207.50s - 2208.98s | because of the cost, 2208.98s - 2212.06s | but now it's actually very, very cost-effective 2212.06s - 2215.62s | because they've had like 10 years plus to optimize it. 2215.62s - 2216.46s | Yeah, agreed. 2216.46s - 2220.06s | And it's also sort of a


chunk_id: 206_chunk_46
chunk_text:
- 2169.16s | But CEOS, honestly, it gets a lot of stuff right. 2169.36s - 2172.24s | This is a really solid credential technology. 2172.24s - 2174.16s | There's more memory, much better security. 2174.16s - 2176.62s | It's very much standards-based, right? 2176.62s - 2180.76s | You don't have a lot of the proprietary algorithms 2180.76s - 2184.20s | and diversification algorithms and things like that 2184.20s - 2186.04s | that were being done with I-Class 2186.04s - 2187.76s | and previous generations of technologies. 2187.76s - 2190.28s | They made tons of improvements. 2190.28s - 2192.74s | This was like the Rolls-Royce of credentials 2192.74s - 2197.74s | when it came out, and the price reflects that, 2198.02s - 2199.02s | as you can see. 2200.10s - 2202.30s | But it had a lot of cool stuff, 2202.30s - 2207.30s | and it wasn't really big on adoption initially 2207.50s - 2208.98s | because of the cost, 2208.98s - 2212.06s | but now it's actually very, very cost-effective 2212.06s - 2215.62s | because they've had like 10 years plus to optimize it. 2215.62s - 2216.46s | Yeah, agreed. 2216.46s - 2220.06s | And it's also sort of a virtual credential 2220.06s - 2222.34s | or can be in a sense, right? 2222.34s - 2224.18s | So CEOS, there are CEOS cards. 2224.18s - 2229.18s | There are also CEOS virtual cards or mobile cards, right? 2230.14s - 2232.14s | If you've heard of like HID mobile access 2232.14s - 2234.18s | or things like that, right? 2234.18s - 2237.70s | There are all these different form factors, really, 2237.70s - 2239.26s | where CEOS can exist. 2239.26s - 2241.20s | So it's extremely portable, extremely well-built. 2241.20s - 2242.04s | I'd say to this day, 2242.04s - 2244.10s | it's a very solid credential technology. 2248.08s - 2250.34s | Now let's talk about support for other technologies 2250.98s - 2254.18s | within the platform. 2254.18s - 2258.38s | So SIOs, again, they made things very card agnostic, right? 2258.38s - 2261.62s | You're not relying on proprietary features of I-Class 2261.62s - 2263.06s | or really any other credential. 2263.06s - 2267.82s | An SIO can be applied even to MyFair Classic, right? 2267.82s - 2271.98s | Another sort of infamously insecure card technology. 2271.98s - 2274.86s | They're very much future-proof, 2274.86s - 2279.86s | and yeah,


chunk_id: 206_chunk_47
chunk_text:
virtual credential 2220.06s - 2222.34s | or can be in a sense, right? 2222.34s - 2224.18s | So CEOS, there are CEOS cards. 2224.18s - 2229.18s | There are also CEOS virtual cards or mobile cards, right? 2230.14s - 2232.14s | If you've heard of like HID mobile access 2232.14s - 2234.18s | or things like that, right? 2234.18s - 2237.70s | There are all these different form factors, really, 2237.70s - 2239.26s | where CEOS can exist. 2239.26s - 2241.20s | So it's extremely portable, extremely well-built. 2241.20s - 2242.04s | I'd say to this day, 2242.04s - 2244.10s | it's a very solid credential technology. 2248.08s - 2250.34s | Now let's talk about support for other technologies 2250.98s - 2254.18s | within the platform. 2254.18s - 2258.38s | So SIOs, again, they made things very card agnostic, right? 2258.38s - 2261.62s | You're not relying on proprietary features of I-Class 2261.62s - 2263.06s | or really any other credential. 2263.06s - 2267.82s | An SIO can be applied even to MyFair Classic, right? 2267.82s - 2271.98s | Another sort of infamously insecure card technology. 2271.98s - 2274.86s | They're very much future-proof, 2274.86s - 2279.86s | and yeah, they're an extremely powerful technology. 2280.06s - 2280.90s | I don't know, Bhavik, 2280.90s - 2283.38s | if you have anything you want to add or Nick. 2283.38s - 2287.70s | Yeah, so the neat idea about a secure object 2287.70s - 2289.90s | is that it's agnostic. 2289.90s - 2292.46s | So you can take any container you want, 2292.46s - 2296.58s | whether it's an I-Class PicoPass container 2296.58s - 2298.86s | or whether it's CEOS or it does fire, 2298.86s - 2303.14s | whatever flavor of little tiny crappy digital safe 2303.14s - 2304.06s | that you want to use, 2304.06s - 2306.90s | you can actually still put this concept 2306.90s - 2308.94s | of a secure object on there. 2308.94s - 2312.34s | And so it makes it very extensible and reusable. 2313.42s - 2316.50s | And it gives them a lot more flexibility 2316.50s - 2319.62s | because they can control the data model. 2319.62s - 2321.42s | You can't control as much 2321.42s - 2323.78s | how the card technology itself behaves in the reader, 2323.78s - 2325.74s | but that's kind of splitting hairs a little bit. 2325.74s - 2328.94s | So


chunk_id: 206_chunk_48
chunk_text:
they're an extremely powerful technology. 2280.06s - 2280.90s | I don't know, Bhavik, 2280.90s - 2283.38s | if you have anything you want to add or Nick. 2283.38s - 2287.70s | Yeah, so the neat idea about a secure object 2287.70s - 2289.90s | is that it's agnostic. 2289.90s - 2292.46s | So you can take any container you want, 2292.46s - 2296.58s | whether it's an I-Class PicoPass container 2296.58s - 2298.86s | or whether it's CEOS or it does fire, 2298.86s - 2303.14s | whatever flavor of little tiny crappy digital safe 2303.14s - 2304.06s | that you want to use, 2304.06s - 2306.90s | you can actually still put this concept 2306.90s - 2308.94s | of a secure object on there. 2308.94s - 2312.34s | And so it makes it very extensible and reusable. 2313.42s - 2316.50s | And it gives them a lot more flexibility 2316.50s - 2319.62s | because they can control the data model. 2319.62s - 2321.42s | You can't control as much 2321.42s - 2323.78s | how the card technology itself behaves in the reader, 2323.78s - 2325.74s | but that's kind of splitting hairs a little bit. 2325.74s - 2328.94s | So we don't need to spend too much time on that. 2328.94s - 2331.66s | But they really did try to intend for this card 2331.66s - 2333.54s | to be the one card that ruled them all. 2333.54s - 2336.06s | And they tried to be as forward-thinking as possible. 2336.06s - 2337.66s | And they really kind of hit that mark 2337.66s - 2339.82s | in a lot of ways, in my opinion. 2339.82s - 2341.46s | I agree, I agree. 2341.46s - 2345.46s | So let's talk about how SE credentials are encoded. 2346.46s - 2350.22s | So to start, you have to obtain the binding from the card, 2350.22s - 2352.94s | really the serial number or UID of the card. 2352.94s - 2355.70s | You have to calculate diversified write keys. 2355.70s - 2360.06s | You need to generate a unique ID for the secure object 2360.06s - 2364.18s | and calculate the keys for encrypting the secure object. 2364.18s - 2365.98s | You gotta encrypt and sign the data. 2366.82s - 2369.26s | And lastly, you need to authenticate the card 2369.26s - 2373.42s | with diversified keys and write the SIO to it. 2373.42s


chunk_id: 206_chunk_49
chunk_text:
we don't need to spend too much time on that. 2328.94s - 2331.66s | But they really did try to intend for this card 2331.66s - 2333.54s | to be the one card that ruled them all. 2333.54s - 2336.06s | And they tried to be as forward-thinking as possible. 2336.06s - 2337.66s | And they really kind of hit that mark 2337.66s - 2339.82s | in a lot of ways, in my opinion. 2339.82s - 2341.46s | I agree, I agree. 2341.46s - 2345.46s | So let's talk about how SE credentials are encoded. 2346.46s - 2350.22s | So to start, you have to obtain the binding from the card, 2350.22s - 2352.94s | really the serial number or UID of the card. 2352.94s - 2355.70s | You have to calculate diversified write keys. 2355.70s - 2360.06s | You need to generate a unique ID for the secure object 2360.06s - 2364.18s | and calculate the keys for encrypting the secure object. 2364.18s - 2365.98s | You gotta encrypt and sign the data. 2366.82s - 2369.26s | And lastly, you need to authenticate the card 2369.26s - 2373.42s | with diversified keys and write the SIO to it. 2373.42s - 2377.82s | And so that brings us to the I-Class SE encoder, right? 2377.82s - 2381.78s | This is how HID enables customers 2381.78s - 2386.02s | to encode their own SE, right, SIO-enabled credentials, 2386.02s - 2389.54s | be that I-Class SE, CEOS, MyFairClassic, 2389.54s - 2393.22s | you know, with SIO, that's SIO-enabled, et cetera, right? 2393.22s - 2394.70s | And it came in two form factors, 2394.74s - 2396.66s | or it comes in two form factors, 2396.66s - 2399.50s | the desktop encoder as well as 2399.50s - 2402.70s | an embedded printer-based encoder as well. 2403.58s - 2406.70s | And it can do a lot of stuff, right? 2406.70s - 2408.74s | It can encode, you know, primarily, right, 2408.74s - 2410.46s | it can encode genuine HID cards, 2410.46s - 2414.82s | but you can also encode third-party cards as well, right? 2414.82s - 2417.22s | It can, you know, encode prox, 2417.22s - 2418.86s | lots of different high-frequency credentials, 2418.86s - 2421.70s | including both CEOS, DesFire, I-Class SE. 2421.70s - 2424.42s | Yeah, these were pretty cool little tools. 2425.10s - 2427.38s | Not cheap, very, very expensive, 2427.38s -


chunk_id: 206_chunk_50
chunk_text:
- 2377.82s | And so that brings us to the I-Class SE encoder, right? 2377.82s - 2381.78s | This is how HID enables customers 2381.78s - 2386.02s | to encode their own SE, right, SIO-enabled credentials, 2386.02s - 2389.54s | be that I-Class SE, CEOS, MyFairClassic, 2389.54s - 2393.22s | you know, with SIO, that's SIO-enabled, et cetera, right? 2393.22s - 2394.70s | And it came in two form factors, 2394.74s - 2396.66s | or it comes in two form factors, 2396.66s - 2399.50s | the desktop encoder as well as 2399.50s - 2402.70s | an embedded printer-based encoder as well. 2403.58s - 2406.70s | And it can do a lot of stuff, right? 2406.70s - 2408.74s | It can encode, you know, primarily, right, 2408.74s - 2410.46s | it can encode genuine HID cards, 2410.46s - 2414.82s | but you can also encode third-party cards as well, right? 2414.82s - 2417.22s | It can, you know, encode prox, 2417.22s - 2418.86s | lots of different high-frequency credentials, 2418.86s - 2421.70s | including both CEOS, DesFire, I-Class SE. 2421.70s - 2424.42s | Yeah, these were pretty cool little tools. 2425.10s - 2427.38s | Not cheap, very, very expensive, 2427.38s - 2430.10s | but, you know, if you had a need for it, 2430.10s - 2432.06s | it really kind of came in clutch. 2432.06s - 2434.42s | So it allowed you not only to create 2434.42s - 2436.34s | your own credentials on demand, 2436.34s - 2439.42s | but also it allowed you to, you know, 2439.42s - 2441.38s | create custom configuration cards 2441.38s - 2444.02s | and really enable being able to service 2444.02s - 2446.50s | your own platform a lot more easily 2446.50s - 2448.54s | than having to call the vendor every single time. 2448.54s - 2453.10s | So it definitely filled a very important business need 2453.10s - 2454.42s | from that perspective. 2455.70s - 2458.50s | Absolutely, and yeah, configuration cards, 2458.50s - 2460.82s | that last one there, that's an important one 2460.82s - 2463.42s | that we're gonna talk about a little more in a bit. 2465.34s - 2467.42s | But first, let's talk about the target markets for this. 2467.42s - 2469.22s | Why did HID make this, right? 2469.22s - 2473.38s | Who's buying this, you know, what is it used for, right? 2473.38s - 2476.50s | So whether


chunk_id: 206_chunk_51
chunk_text:
2430.10s | but, you know, if you had a need for it, 2430.10s - 2432.06s | it really kind of came in clutch. 2432.06s - 2434.42s | So it allowed you not only to create 2434.42s - 2436.34s | your own credentials on demand, 2436.34s - 2439.42s | but also it allowed you to, you know, 2439.42s - 2441.38s | create custom configuration cards 2441.38s - 2444.02s | and really enable being able to service 2444.02s - 2446.50s | your own platform a lot more easily 2446.50s - 2448.54s | than having to call the vendor every single time. 2448.54s - 2453.10s | So it definitely filled a very important business need 2453.10s - 2454.42s | from that perspective. 2455.70s - 2458.50s | Absolutely, and yeah, configuration cards, 2458.50s - 2460.82s | that last one there, that's an important one 2460.82s - 2463.42s | that we're gonna talk about a little more in a bit. 2465.34s - 2467.42s | But first, let's talk about the target markets for this. 2467.42s - 2469.22s | Why did HID make this, right? 2469.22s - 2473.38s | Who's buying this, you know, what is it used for, right? 2473.38s - 2476.50s | So whether it's customers that have custom keys, right, 2476.50s - 2477.94s | for various security reasons, 2477.94s - 2480.74s | or they have a bunch of credentials that they wanna keep, 2480.74s - 2481.66s | they don't wanna have to buy new ones, 2481.66s - 2483.34s | but they wanna re-encode them, 2483.34s - 2484.94s | like put different data on them, 2484.94s - 2486.78s | or switch from standard to elite. 2487.94s - 2490.30s | They want to generate their own card numbers 2490.30s - 2492.78s | that HID doesn't know about, right, 2492.78s - 2495.90s | or they wanna customize certain reader behavior functionality 2495.90s - 2497.10s | or load in keys, right, 2497.10s - 2499.00s | and so they wanna create config cards. 2499.86s - 2502.26s | A couple of these are a little sneaky in my opinion. 2502.26s - 2504.26s | So for example, you know, 2504.26s - 2507.62s | we have customer generated card numbers on there. 2507.62s - 2510.14s | That is a very specific use case 2510.14s - 2512.34s | because what you may not realize, 2512.34s - 2514.02s | or maybe many of you already do realize 2514.02s - 2515.44s | if you're


chunk_id: 206_chunk_52
chunk_text:
it's customers that have custom keys, right, 2476.50s - 2477.94s | for various security reasons, 2477.94s - 2480.74s | or they have a bunch of credentials that they wanna keep, 2480.74s - 2481.66s | they don't wanna have to buy new ones, 2481.66s - 2483.34s | but they wanna re-encode them, 2483.34s - 2484.94s | like put different data on them, 2484.94s - 2486.78s | or switch from standard to elite. 2487.94s - 2490.30s | They want to generate their own card numbers 2490.30s - 2492.78s | that HID doesn't know about, right, 2492.78s - 2495.90s | or they wanna customize certain reader behavior functionality 2495.90s - 2497.10s | or load in keys, right, 2497.10s - 2499.00s | and so they wanna create config cards. 2499.86s - 2502.26s | A couple of these are a little sneaky in my opinion. 2502.26s - 2504.26s | So for example, you know, 2504.26s - 2507.62s | we have customer generated card numbers on there. 2507.62s - 2510.14s | That is a very specific use case 2510.14s - 2512.34s | because what you may not realize, 2512.34s - 2514.02s | or maybe many of you already do realize 2514.02s - 2515.44s | if you're in this talk, 2515.44s - 2518.42s | is that by default, when you buy credentials, 2518.42s - 2521.54s | they are pre-programmed with card numbers 2521.54s - 2523.26s | and weekend information. 2523.26s - 2528.08s | So someone else is giving you a box of passwords to use 2528.08s - 2530.50s | and you assign those passwords. 2530.50s - 2533.50s | It feels kind of weird sometimes when you think about it. 2533.50s - 2535.90s | And so what the encoder would allow you to do 2535.90s - 2538.58s | if you're really super secret squirrel about it, 2538.58s - 2541.14s | is you could get blank card stock 2541.14s - 2543.86s | and you could have this encoder either at your desktop 2543.86s - 2546.22s | or built into your printer, 2546.22s - 2549.46s | and you can basically generate your own card numbers 2549.46s - 2552.06s | and then you wouldn't have to worry as much 2552.06s - 2554.02s | about some third party vendor 2554.02s - 2555.84s | that you don't have control over 2555.84s - 2558.58s | knowing those critical bits of information. 2558.58s - 2560.46s | Of course, that's a lot of overhead too 2560.46s


chunk_id: 206_chunk_53
chunk_text:
in this talk, 2515.44s - 2518.42s | is that by default, when you buy credentials, 2518.42s - 2521.54s | they are pre-programmed with card numbers 2521.54s - 2523.26s | and weekend information. 2523.26s - 2528.08s | So someone else is giving you a box of passwords to use 2528.08s - 2530.50s | and you assign those passwords. 2530.50s - 2533.50s | It feels kind of weird sometimes when you think about it. 2533.50s - 2535.90s | And so what the encoder would allow you to do 2535.90s - 2538.58s | if you're really super secret squirrel about it, 2538.58s - 2541.14s | is you could get blank card stock 2541.14s - 2543.86s | and you could have this encoder either at your desktop 2543.86s - 2546.22s | or built into your printer, 2546.22s - 2549.46s | and you can basically generate your own card numbers 2549.46s - 2552.06s | and then you wouldn't have to worry as much 2552.06s - 2554.02s | about some third party vendor 2554.02s - 2555.84s | that you don't have control over 2555.84s - 2558.58s | knowing those critical bits of information. 2558.58s - 2560.46s | Of course, that's a lot of overhead too 2560.46s - 2562.34s | because now you have to manage and remember 2562.34s - 2564.46s | all the card numbers that you used ever, 2564.46s - 2566.30s | so you can't repeat it. 2566.30s - 2567.14s | And in practice, 2567.14s - 2569.30s | that wasn't a feature that's used very often, 2569.30s - 2572.34s | but you still need to have that capability there. 2572.34s - 2574.98s | The other sneaky thing is integrator lock-in. 2574.98s - 2577.14s | You might be thinking, how does that work? 2577.14s - 2580.02s | There have been a couple of areas globally 2580.02s - 2583.78s | where a integrator that has a really strong market presence 2583.78s - 2586.14s | will say, hmm, you know what? 2586.14s - 2589.42s | We're gonna get our own custom key 2589.42s - 2591.04s | and all of our customers, 2591.04s - 2593.28s | we're gonna issue them readers and cards 2593.28s - 2595.32s | that use our custom key. 2595.32s - 2597.56s | And so now, if you're one of their customers 2597.56s - 2600.28s | and you need more readers or you need more cards, 2600.28s - 2602.42s | you only got one place you


chunk_id: 206_chunk_54
chunk_text:
- 2562.34s | because now you have to manage and remember 2562.34s - 2564.46s | all the card numbers that you used ever, 2564.46s - 2566.30s | so you can't repeat it. 2566.30s - 2567.14s | And in practice, 2567.14s - 2569.30s | that wasn't a feature that's used very often, 2569.30s - 2572.34s | but you still need to have that capability there. 2572.34s - 2574.98s | The other sneaky thing is integrator lock-in. 2574.98s - 2577.14s | You might be thinking, how does that work? 2577.14s - 2580.02s | There have been a couple of areas globally 2580.02s - 2583.78s | where a integrator that has a really strong market presence 2583.78s - 2586.14s | will say, hmm, you know what? 2586.14s - 2589.42s | We're gonna get our own custom key 2589.42s - 2591.04s | and all of our customers, 2591.04s - 2593.28s | we're gonna issue them readers and cards 2593.28s - 2595.32s | that use our custom key. 2595.32s - 2597.56s | And so now, if you're one of their customers 2597.56s - 2600.28s | and you need more readers or you need more cards, 2600.28s - 2602.42s | you only got one place you can go 2602.42s - 2604.60s | in order to get interoperable credentials 2604.60s - 2606.88s | because only they have the key. 2606.88s - 2609.56s | So we don't see too much of that in the US, 2609.56s - 2613.08s | but we did see some of that in Singapore and Australia 2613.08s - 2614.32s | and a few other places. 2614.32s - 2616.64s | So it's just really interesting to see how people 2616.64s - 2620.56s | kind of creatively use some of the features 2620.56s - 2622.20s | that are offered by the platform. 2622.56s - 2623.64s | Yeah. 2623.64s - 2625.28s | Indeed. 2625.28s - 2630.28s | So the I-Class SE encoder, the CP1000, that's the hardware. 2630.44s - 2633.48s | Assure ID is the software, right? 2633.48s - 2636.40s | It doesn't exclusively exist for the CP1000, right? 2636.40s - 2639.52s | It's used primarily for badge printing, right? 2639.52s - 2642.84s | But it is the software primarily that is used 2642.84s - 2644.96s | for credential encoding with the CP1000 2644.96s - 2649.12s | and it sort of facilitates all of these encoding operations. 2649.12s - 2651.08s | Yeah, this is the front end.


chunk_id: 206_chunk_55
chunk_text:
can go 2602.42s - 2604.60s | in order to get interoperable credentials 2604.60s - 2606.88s | because only they have the key. 2606.88s - 2609.56s | So we don't see too much of that in the US, 2609.56s - 2613.08s | but we did see some of that in Singapore and Australia 2613.08s - 2614.32s | and a few other places. 2614.32s - 2616.64s | So it's just really interesting to see how people 2616.64s - 2620.56s | kind of creatively use some of the features 2620.56s - 2622.20s | that are offered by the platform. 2622.56s - 2623.64s | Yeah. 2623.64s - 2625.28s | Indeed. 2625.28s - 2630.28s | So the I-Class SE encoder, the CP1000, that's the hardware. 2630.44s - 2633.48s | Assure ID is the software, right? 2633.48s - 2636.40s | It doesn't exclusively exist for the CP1000, right? 2636.40s - 2639.52s | It's used primarily for badge printing, right? 2639.52s - 2642.84s | But it is the software primarily that is used 2642.84s - 2644.96s | for credential encoding with the CP1000 2644.96s - 2649.12s | and it sort of facilitates all of these encoding operations. 2649.12s - 2651.08s | Yeah, this is the front end. 2651.08s - 2654.00s | This is the main default user interface 2654.00s - 2657.46s | for interacting with this piece of hardware. 2657.46s - 2662.46s | And it is a little bit clunky to use, I'm not gonna lie, 2663.52s - 2665.12s | but it's kind of the only thing 2665.12s - 2666.68s | that you have out of the box. 2666.68s - 2669.04s | Some software vendors, 2669.04s - 2671.18s | if you have a really large access control system, 2671.18s - 2674.28s | like say from Linel or Software House, 2675.28s - 2679.00s | some vendors actually are able to integrate pieces 2679.00s - 2680.96s | of this software, the SDK, 2680.96s - 2682.76s | into their access control software. 2682.76s - 2686.48s | So as a customer, when you wanted to encode a card, 2686.48s - 2688.48s | you don't have to load a separate application. 2688.48s - 2691.86s | You can just do it natively in your application 2691.86s - 2693.32s | and behind the scenes, 2693.32s - 2697.20s | it makes the appropriate API calls, yada, yada, yada. 2697.20s - 2701.04s | So that's how the SDK portion is designed to be used. 2702.08s -


chunk_id: 206_chunk_56
chunk_text:
2651.08s - 2654.00s | This is the main default user interface 2654.00s - 2657.46s | for interacting with this piece of hardware. 2657.46s - 2662.46s | And it is a little bit clunky to use, I'm not gonna lie, 2663.52s - 2665.12s | but it's kind of the only thing 2665.12s - 2666.68s | that you have out of the box. 2666.68s - 2669.04s | Some software vendors, 2669.04s - 2671.18s | if you have a really large access control system, 2671.18s - 2674.28s | like say from Linel or Software House, 2675.28s - 2679.00s | some vendors actually are able to integrate pieces 2679.00s - 2680.96s | of this software, the SDK, 2680.96s - 2682.76s | into their access control software. 2682.76s - 2686.48s | So as a customer, when you wanted to encode a card, 2686.48s - 2688.48s | you don't have to load a separate application. 2688.48s - 2691.86s | You can just do it natively in your application 2691.86s - 2693.32s | and behind the scenes, 2693.32s - 2697.20s | it makes the appropriate API calls, yada, yada, yada. 2697.20s - 2701.04s | So that's how the SDK portion is designed to be used. 2702.08s - 2702.92s | Indeed. 2704.04s - 2707.24s | So let's talk about the internal operation of the encoder. 2708.04s - 2710.44s | Everything in that box, 2710.44s - 2713.48s | that is inside of the encoder itself, 2713.48s - 2715.78s | which also happens to be rectangular in shape. 2717.12s - 2718.96s | So you have the desktop here, 2718.96s - 2722.48s | essentially the Assure ID software in normal operations, 2722.48s - 2725.20s | that talks to core, which acts as a router 2725.20s - 2727.50s | between different components in the encoder, 2727.50s - 2729.52s | sending messages back and forth, 2729.52s - 2732.56s | which will send commands to the SAM. 2732.56s - 2736.04s | SAM will send commands to the NFC front end. 2736.04s - 2737.88s | NFC front end talks to the credential, 2737.88s - 2741.42s | and that's sort of the overall block diagram 2741.42s - 2742.66s | of how encoding works. 2744.56s - 2747.92s | And these encoders, they're very customizable, 2747.92s - 2749.04s | they're very flexible. 2749.04s - 2751.64s | You can use different types of keys with them. 2752.68s - 2755.24s | One sort of interesting thing is that 2755.24s -


chunk_id: 206_chunk_57
chunk_text:
2702.92s | Indeed. 2704.04s - 2707.24s | So let's talk about the internal operation of the encoder. 2708.04s - 2710.44s | Everything in that box, 2710.44s - 2713.48s | that is inside of the encoder itself, 2713.48s - 2715.78s | which also happens to be rectangular in shape. 2717.12s - 2718.96s | So you have the desktop here, 2718.96s - 2722.48s | essentially the Assure ID software in normal operations, 2722.48s - 2725.20s | that talks to core, which acts as a router 2725.20s - 2727.50s | between different components in the encoder, 2727.50s - 2729.52s | sending messages back and forth, 2729.52s - 2732.56s | which will send commands to the SAM. 2732.56s - 2736.04s | SAM will send commands to the NFC front end. 2736.04s - 2737.88s | NFC front end talks to the credential, 2737.88s - 2741.42s | and that's sort of the overall block diagram 2741.42s - 2742.66s | of how encoding works. 2744.56s - 2747.92s | And these encoders, they're very customizable, 2747.92s - 2749.04s | they're very flexible. 2749.04s - 2751.64s | You can use different types of keys with them. 2752.68s - 2755.24s | One sort of interesting thing is that 2755.24s - 2758.68s | HID does sell these encoders, 2758.68s - 2761.24s | but they're not unlimited use. 2761.24s - 2763.36s | They actually have a credit system 2763.36s - 2764.90s | where when you buy an encoder, 2764.90s - 2766.94s | you can only encode a certain number of cards 2766.94s - 2768.42s | of different credential types with it. 2768.42s - 2769.26s | It's super sneaky. 2769.26s - 2772.22s | You spend $1,500 or $2,000 on an encoder, 2772.22s - 2774.46s | you're like, cool, I can make as many cards as I want, 2774.46s - 2775.30s | right? 2775.30s - 2776.14s | Nope! 2777.42s - 2779.42s | Indeed, indeed. 2779.42s - 2782.22s | You can make 30 configuration cards. 2782.22s - 2784.10s | Out of the gate, yes. 2784.10s - 2785.56s | Only 30, yes. 2787.98s - 2790.54s | So now let's talk about the reader side of things. 2790.54s - 2791.74s | So the iClass SE reader, 2791.74s - 2794.38s | it's generally what we call revision e-readers. 2794.38s - 2797.14s | Technically, there are some revision d-readers 2797.14s - 2799.94s | that came before it, although they're very rare. 2799.94s - 2802.14s | They can be ran


chunk_id: 206_chunk_58
chunk_text:
2758.68s | HID does sell these encoders, 2758.68s - 2761.24s | but they're not unlimited use. 2761.24s - 2763.36s | They actually have a credit system 2763.36s - 2764.90s | where when you buy an encoder, 2764.90s - 2766.94s | you can only encode a certain number of cards 2766.94s - 2768.42s | of different credential types with it. 2768.42s - 2769.26s | It's super sneaky. 2769.26s - 2772.22s | You spend $1,500 or $2,000 on an encoder, 2772.22s - 2774.46s | you're like, cool, I can make as many cards as I want, 2774.46s - 2775.30s | right? 2775.30s - 2776.14s | Nope! 2777.42s - 2779.42s | Indeed, indeed. 2779.42s - 2782.22s | You can make 30 configuration cards. 2782.22s - 2784.10s | Out of the gate, yes. 2784.10s - 2785.56s | Only 30, yes. 2787.98s - 2790.54s | So now let's talk about the reader side of things. 2790.54s - 2791.74s | So the iClass SE reader, 2791.74s - 2794.38s | it's generally what we call revision e-readers. 2794.38s - 2797.14s | Technically, there are some revision d-readers 2797.14s - 2799.94s | that came before it, although they're very rare. 2799.94s - 2802.14s | They can be ran as iClass SE, multi-class SE, 2802.14s - 2803.26s | and a few other things. 2803.26s - 2805.70s | They come in all kinds of different form factors. 2807.90s - 2810.42s | But I can guarantee that most of the people 2810.42s - 2812.14s | in this audience have seen at least one. 2812.14s - 2814.54s | Yeah, it's the same piece of hardware internally. 2814.54s - 2817.10s | It's just marked up differently with different stickers 2817.10s - 2819.94s | and different software configurations. 2819.94s - 2822.84s | And of course, they make them in different sizes and shapes, 2822.84s - 2825.92s | but the primary circuitry and the design of it 2825.92s - 2827.88s | is still all the same. 2827.88s - 2831.68s | Yeah, so let's talk about how things are decoded, right? 2833.54s - 2836.28s | So in short here, what's happening is that 2838.28s - 2841.08s | once the card is pulling back 2841.08s - 2844.12s | or reading the encrypted data blob, 2844.12s - 2846.00s | now the SIO from the card, 2846.00s - 2847.60s | first it's doing a signature check, right? 2847.60s - 2850.28s | Making sure that the data hasn't been tampered


chunk_id: 206_chunk_59
chunk_text:
as iClass SE, multi-class SE, 2802.14s - 2803.26s | and a few other things. 2803.26s - 2805.70s | They come in all kinds of different form factors. 2807.90s - 2810.42s | But I can guarantee that most of the people 2810.42s - 2812.14s | in this audience have seen at least one. 2812.14s - 2814.54s | Yeah, it's the same piece of hardware internally. 2814.54s - 2817.10s | It's just marked up differently with different stickers 2817.10s - 2819.94s | and different software configurations. 2819.94s - 2822.84s | And of course, they make them in different sizes and shapes, 2822.84s - 2825.92s | but the primary circuitry and the design of it 2825.92s - 2827.88s | is still all the same. 2827.88s - 2831.68s | Yeah, so let's talk about how things are decoded, right? 2833.54s - 2836.28s | So in short here, what's happening is that 2838.28s - 2841.08s | once the card is pulling back 2841.08s - 2844.12s | or reading the encrypted data blob, 2844.12s - 2846.00s | now the SIO from the card, 2846.00s - 2847.60s | first it's doing a signature check, right? 2847.60s - 2850.28s | Making sure that the data hasn't been tampered with. 2850.28s - 2852.00s | Then it's decrypting the data, 2852.00s - 2853.60s | and then it's parsing the weekend data, 2853.60s - 2855.52s | that same weekend data that Babak 2855.52s - 2857.48s | was talking about earlier, right? 2857.48s - 2860.00s | That everything else is sort of a wrapper around, 2860.00s - 2862.56s | and sending it back to the door controller, 2862.56s - 2864.16s | which will ultimately decode it 2864.16s - 2867.56s | and make a sort of a go, no-go, 2867.56s - 2869.76s | or an allow slash deny decision. 2876.04s - 2878.36s | Go ahead, yeah, this is kind of a cool zoomed-in part 2878.36s - 2880.44s | of what actually happens inside the reader 2880.44s - 2881.96s | when dealing with an SIO. 2882.92s - 2884.44s | So what Aaron just explained, 2884.44s - 2887.44s | the job of that signature check is to see, 2887.44s - 2889.64s | has that data been modified? 2889.64s - 2892.68s | Is that data bound to the UID or CSN of the card 2892.68s - 2894.16s | that it just came off of? 2894.16s - 2897.72s | So after that step, and only if that


chunk_id: 206_chunk_60
chunk_text:
with. 2850.28s - 2852.00s | Then it's decrypting the data, 2852.00s - 2853.60s | and then it's parsing the weekend data, 2853.60s - 2855.52s | that same weekend data that Babak 2855.52s - 2857.48s | was talking about earlier, right? 2857.48s - 2860.00s | That everything else is sort of a wrapper around, 2860.00s - 2862.56s | and sending it back to the door controller, 2862.56s - 2864.16s | which will ultimately decode it 2864.16s - 2867.56s | and make a sort of a go, no-go, 2867.56s - 2869.76s | or an allow slash deny decision. 2876.04s - 2878.36s | Go ahead, yeah, this is kind of a cool zoomed-in part 2878.36s - 2880.44s | of what actually happens inside the reader 2880.44s - 2881.96s | when dealing with an SIO. 2882.92s - 2884.44s | So what Aaron just explained, 2884.44s - 2887.44s | the job of that signature check is to see, 2887.44s - 2889.64s | has that data been modified? 2889.64s - 2892.68s | Is that data bound to the UID or CSN of the card 2892.68s - 2894.16s | that it just came off of? 2894.16s - 2897.72s | So after that step, and only if that step succeeds 2897.72s - 2900.50s | does it actually do the decryption of that weekend data. 2900.50s - 2902.44s | And then once it decrypts the weekend data, 2902.44s - 2905.34s | it does the transmit step, which we all know and love. 2905.34s - 2907.00s | That's when we hear the beep. 2907.00s - 2911.12s | And it kind of goes on from there, so yeah. 2911.12s - 2912.60s | Thanks. 2912.60s - 2915.08s | So, migration modes. 2915.08s - 2918.28s | So in the industry, yeah, in the industry, 2918.28s - 2922.40s | there's a type of reader called migration readers 2922.40s - 2923.80s | that are designed to support both old 2923.80s - 2925.32s | and new technologies, right? 2925.32s - 2927.84s | And they need to exist, right? 2927.84s - 2930.72s | Their existence is to help customers move 2930.72s - 2932.54s | from less secure older technologies 2932.54s - 2934.72s | to more secure newer ones, right? 2934.72s - 2936.26s | And so by definition, 2936.26s - 2939.56s | they have to support multiple credential types. 2939.56s - 2941.52s | And the most common one you'll see in the field 2941.52s - 2944.68s | is


chunk_id: 206_chunk_61
chunk_text:
step succeeds 2897.72s - 2900.50s | does it actually do the decryption of that weekend data. 2900.50s - 2902.44s | And then once it decrypts the weekend data, 2902.44s - 2905.34s | it does the transmit step, which we all know and love. 2905.34s - 2907.00s | That's when we hear the beep. 2907.00s - 2911.12s | And it kind of goes on from there, so yeah. 2911.12s - 2912.60s | Thanks. 2912.60s - 2915.08s | So, migration modes. 2915.08s - 2918.28s | So in the industry, yeah, in the industry, 2918.28s - 2922.40s | there's a type of reader called migration readers 2922.40s - 2923.80s | that are designed to support both old 2923.80s - 2925.32s | and new technologies, right? 2925.32s - 2927.84s | And they need to exist, right? 2927.84s - 2930.72s | Their existence is to help customers move 2930.72s - 2932.54s | from less secure older technologies 2932.54s - 2934.72s | to more secure newer ones, right? 2934.72s - 2936.26s | And so by definition, 2936.26s - 2939.56s | they have to support multiple credential types. 2939.56s - 2941.52s | And the most common one you'll see in the field 2941.52s - 2944.68s | is probably the multi-class SE reader from HID. 2944.68s - 2946.36s | It's literally the Swiss Army knife of readers. 2946.36s - 2949.42s | It reads pretty much all of the common technologies. 2950.70s - 2953.80s | And even though they aren't always needed by customers, 2953.80s - 2956.80s | a lot of times, integrators will install these 2956.80s - 2959.76s | and stock these because they always work, right? 2959.76s - 2962.30s | If you have to keep, if there's only one kind of reader 2962.30s - 2963.80s | you can keep in stock, right, 2963.80s - 2968.64s | to be able to sell to your customers, your clients, right, 2968.64s - 2970.20s | it stands to reason a lot of people are gonna go 2970.20s - 2971.80s | with the one that always works. 2971.80s - 2974.24s | And that is indeed what happens a lot of the time. 2974.24s - 2976.64s | It always works is a big problem in the industry, 2976.64s - 2978.02s | not just with readers. 2978.02s - 2980.14s | So not only do we have these readers 2980.14s - 2982.26s | that can read all these different card technologies, 2982.26s - 2984.28s |


chunk_id: 206_chunk_62
chunk_text:
probably the multi-class SE reader from HID. 2944.68s - 2946.36s | It's literally the Swiss Army knife of readers. 2946.36s - 2949.42s | It reads pretty much all of the common technologies. 2950.70s - 2953.80s | And even though they aren't always needed by customers, 2953.80s - 2956.80s | a lot of times, integrators will install these 2956.80s - 2959.76s | and stock these because they always work, right? 2959.76s - 2962.30s | If you have to keep, if there's only one kind of reader 2962.30s - 2963.80s | you can keep in stock, right, 2963.80s - 2968.64s | to be able to sell to your customers, your clients, right, 2968.64s - 2970.20s | it stands to reason a lot of people are gonna go 2970.20s - 2971.80s | with the one that always works. 2971.80s - 2974.24s | And that is indeed what happens a lot of the time. 2974.24s - 2976.64s | It always works is a big problem in the industry, 2976.64s - 2978.02s | not just with readers. 2978.02s - 2980.14s | So not only do we have these readers 2980.14s - 2982.26s | that can read all these different card technologies, 2982.26s - 2984.28s | you're like, oh, that's great. 2984.28s - 2985.30s | It's very flexible. 2985.30s - 2986.24s | It's always gonna work. 2986.24s - 2987.08s | That's awesome. 2987.08s - 2991.04s | Except it also really undermines how access control works. 2991.04s - 2992.76s | Similarly, on the hardware side, 2992.76s - 2994.44s | when it comes to electric strikes 2994.44s - 2996.82s | and the door hardware that goes in the door, 2996.82s - 2999.94s | if you've ever slipped a latch with a card 2999.94s - 3000.94s | or anything like that, 3000.94s - 3004.22s | that's because that strike is either misadjusted 3004.22s - 3008.14s | or also very likely sometimes way too darn big 3008.14s - 3009.66s | for the actual latch. 3009.66s - 3011.82s | And as a result, those deadlatch mechanisms 3011.82s - 3013.78s | don't actually work properly. 3013.78s - 3018.42s | But if they only carry one part that's just really big 3018.42s - 3020.14s | and it just works with everything, 3020.14s - 3022.78s | then it's just a lot easier for that integrator as well 3022.78s - 3025.86s | and they probably get a better price on it too. 3025.86s - 3028.70s


chunk_id: 206_chunk_63
chunk_text:
you're like, oh, that's great. 2984.28s - 2985.30s | It's very flexible. 2985.30s - 2986.24s | It's always gonna work. 2986.24s - 2987.08s | That's awesome. 2987.08s - 2991.04s | Except it also really undermines how access control works. 2991.04s - 2992.76s | Similarly, on the hardware side, 2992.76s - 2994.44s | when it comes to electric strikes 2994.44s - 2996.82s | and the door hardware that goes in the door, 2996.82s - 2999.94s | if you've ever slipped a latch with a card 2999.94s - 3000.94s | or anything like that, 3000.94s - 3004.22s | that's because that strike is either misadjusted 3004.22s - 3008.14s | or also very likely sometimes way too darn big 3008.14s - 3009.66s | for the actual latch. 3009.66s - 3011.82s | And as a result, those deadlatch mechanisms 3011.82s - 3013.78s | don't actually work properly. 3013.78s - 3018.42s | But if they only carry one part that's just really big 3018.42s - 3020.14s | and it just works with everything, 3020.14s - 3022.78s | then it's just a lot easier for that integrator as well 3022.78s - 3025.86s | and they probably get a better price on it too. 3025.86s - 3028.70s | Indeed, and these migration readers open the door 3028.70s - 3030.38s | for so-called downgrade attacks, 3030.38s - 3032.98s | credential downgrade attacks, right? 3032.98s - 3035.78s | Because as we discussed earlier, right, 3035.78s - 3037.50s | at the end of the day, 3037.50s - 3039.30s | everything else is sort of just a wrap around 3039.30s - 3042.02s | that WGAN's data that Babak was talking about earlier. 3042.02s - 3043.90s | So as long as the right WGAN's data 3043.90s - 3046.26s | gets sent from the reader to the door controller, 3046.26s - 3047.46s | it doesn't matter necessarily 3047.46s - 3049.30s | what the credential technology on the front end is. 3049.30s - 3054.18s | So you can take WGAN data from a more secure credential 3054.18s - 3055.46s | that comes out of a reader 3056.06s - 3057.22s | and put it on a prox credential instead 3057.22s - 3058.50s | as long as it's supported. 3058.50s - 3060.14s | And as far as the door controller is concerned, 3060.14s - 3062.98s | it's the same thing, it's the same person. 3062.98s - 3065.22s | But we don't wanna bore you too much


chunk_id: 206_chunk_64
chunk_text:
| Indeed, and these migration readers open the door 3028.70s - 3030.38s | for so-called downgrade attacks, 3030.38s - 3032.98s | credential downgrade attacks, right? 3032.98s - 3035.78s | Because as we discussed earlier, right, 3035.78s - 3037.50s | at the end of the day, 3037.50s - 3039.30s | everything else is sort of just a wrap around 3039.30s - 3042.02s | that WGAN's data that Babak was talking about earlier. 3042.02s - 3043.90s | So as long as the right WGAN's data 3043.90s - 3046.26s | gets sent from the reader to the door controller, 3046.26s - 3047.46s | it doesn't matter necessarily 3047.46s - 3049.30s | what the credential technology on the front end is. 3049.30s - 3054.18s | So you can take WGAN data from a more secure credential 3054.18s - 3055.46s | that comes out of a reader 3056.06s - 3057.22s | and put it on a prox credential instead 3057.22s - 3058.50s | as long as it's supported. 3058.50s - 3060.14s | And as far as the door controller is concerned, 3060.14s - 3062.98s | it's the same thing, it's the same person. 3062.98s - 3065.22s | But we don't wanna bore you too much with this. 3065.22s - 3067.06s | It's really important stuff. 3067.06s - 3071.30s | We're gonna wanna get to some more interesting stuff 3071.30s - 3072.14s | here in a second. 3072.14s - 3074.34s | But because it's good context, 3074.34s - 3077.50s | we wanna make sure you have a little bit of it at least. 3077.50s - 3079.10s | Indeed. 3079.10s - 3083.98s | So let's talk about the I-Class SE reader modules, right? 3084.02s - 3086.62s | So not all I-Class SE readers 3086.62s - 3088.86s | look like a typical I-Class SE reader, right? 3088.86s - 3090.98s | There are embedded modules where other vendors 3090.98s - 3094.02s | can actually take this technology, the reader platform, 3094.02s - 3095.46s | and embed it in something else, 3095.46s - 3096.86s | something that looks completely different, 3096.86s - 3098.38s | such as like a biometric reader 3098.38s - 3100.26s | or something along those lines. 3102.10s - 3105.02s | So now let's talk about configuration methods 3105.02s - 3105.86s | for these readers. 3105.86s - 3108.58s | So it's all SNMPv3 based, right? 3108.58s - 3110.14s | Which is an interesting choice of protocol, 3110.14s -


chunk_id: 206_chunk_65
chunk_text:
with this. 3065.22s - 3067.06s | It's really important stuff. 3067.06s - 3071.30s | We're gonna wanna get to some more interesting stuff 3071.30s - 3072.14s | here in a second. 3072.14s - 3074.34s | But because it's good context, 3074.34s - 3077.50s | we wanna make sure you have a little bit of it at least. 3077.50s - 3079.10s | Indeed. 3079.10s - 3083.98s | So let's talk about the I-Class SE reader modules, right? 3084.02s - 3086.62s | So not all I-Class SE readers 3086.62s - 3088.86s | look like a typical I-Class SE reader, right? 3088.86s - 3090.98s | There are embedded modules where other vendors 3090.98s - 3094.02s | can actually take this technology, the reader platform, 3094.02s - 3095.46s | and embed it in something else, 3095.46s - 3096.86s | something that looks completely different, 3096.86s - 3098.38s | such as like a biometric reader 3098.38s - 3100.26s | or something along those lines. 3102.10s - 3105.02s | So now let's talk about configuration methods 3105.02s - 3105.86s | for these readers. 3105.86s - 3108.58s | So it's all SNMPv3 based, right? 3108.58s - 3110.14s | Which is an interesting choice of protocol, 3110.14s - 3111.70s | we'll get to in a bit. 3112.30s - 3115.94s | It's SNMPv3 over APDUs. 3115.94s - 3118.62s | You can do it over NFC, BLE, OSTP, UART, et cetera. 3118.62s - 3119.82s | It doesn't matter. 3119.82s - 3121.10s | And there are a few different ways to do it, 3121.10s - 3123.98s | but generally, for readers in the field, 3123.98s - 3125.50s | it's either with config cards 3125.50s - 3128.54s | or the HID Reader Manager app most of the time. 3130.94s - 3132.98s | Generally, when it comes to reader... 3133.98s - 3137.02s | Generally, when it comes to reader configuration, 3137.02s - 3139.50s | there are a lot of different things that you can do. 3141.90s - 3142.74s | Right? 3142.74s - 3145.82s | And these configuration cards specifically 3145.82s - 3148.86s | were a bit of a new technology with the platform. 3148.86s - 3151.06s | They're Java card based, right? 3151.06s - 3153.90s | Also known as the Artemis updater card. 3153.90s - 3158.14s | And if you encode one with a CP1000 encoder, right? 3158.14s - 3160.38s | They, you know, they have credits. 3160.38s - 3163.10s | Ones from


chunk_id: 206_chunk_66
chunk_text:
3111.70s | we'll get to in a bit. 3112.30s - 3115.94s | It's SNMPv3 over APDUs. 3115.94s - 3118.62s | You can do it over NFC, BLE, OSTP, UART, et cetera. 3118.62s - 3119.82s | It doesn't matter. 3119.82s - 3121.10s | And there are a few different ways to do it, 3121.10s - 3123.98s | but generally, for readers in the field, 3123.98s - 3125.50s | it's either with config cards 3125.50s - 3128.54s | or the HID Reader Manager app most of the time. 3130.94s - 3132.98s | Generally, when it comes to reader... 3133.98s - 3137.02s | Generally, when it comes to reader configuration, 3137.02s - 3139.50s | there are a lot of different things that you can do. 3141.90s - 3142.74s | Right? 3142.74s - 3145.82s | And these configuration cards specifically 3145.82s - 3148.86s | were a bit of a new technology with the platform. 3148.86s - 3151.06s | They're Java card based, right? 3151.06s - 3153.90s | Also known as the Artemis updater card. 3153.90s - 3158.14s | And if you encode one with a CP1000 encoder, right? 3158.14s - 3160.38s | They, you know, they have credits. 3160.38s - 3163.10s | Ones from the factory have unlimited credits. 3163.10s - 3164.34s | Yeah. 3164.34s - 3168.90s | In short, HID config cards are the same as the Java, 3168.90s - 3170.22s | or the same technology, right? 3170.22s - 3172.98s | They're Java cards, like a J3D081, 3172.98s - 3175.58s | just like many EMV bank cards, credit cards, et cetera, 3175.58s - 3178.54s | are same platform, different use case. 3180.22s - 3183.34s | So let's talk a bit about how the firmware structure sits. 3183.34s - 3184.46s | Do you mind if I jump in on that? 3184.46s - 3185.30s | Sure, yeah. 3185.30s - 3189.50s | Thank you. 3189.50s - 3190.70s | So from a firmware perspective, 3190.70s - 3192.82s | we've got those components we talked about earlier 3192.82s - 3194.18s | within the encoder, 3194.18s - 3195.62s | kind of similar components within the reader. 3195.62s - 3199.74s | We've got that core, SAM, we've got expansion modules. 3199.74s - 3201.42s | Each of these things have firmware, 3201.50s - 3203.70s | and all of those things have to be upgraded, 3203.70s - 3206.06s | or ideally they should be able to be upgraded. 3206.06s - 3210.10s |


chunk_id: 206_chunk_67
chunk_text:
the factory have unlimited credits. 3163.10s - 3164.34s | Yeah. 3164.34s - 3168.90s | In short, HID config cards are the same as the Java, 3168.90s - 3170.22s | or the same technology, right? 3170.22s - 3172.98s | They're Java cards, like a J3D081, 3172.98s - 3175.58s | just like many EMV bank cards, credit cards, et cetera, 3175.58s - 3178.54s | are same platform, different use case. 3180.22s - 3183.34s | So let's talk a bit about how the firmware structure sits. 3183.34s - 3184.46s | Do you mind if I jump in on that? 3184.46s - 3185.30s | Sure, yeah. 3185.30s - 3189.50s | Thank you. 3189.50s - 3190.70s | So from a firmware perspective, 3190.70s - 3192.82s | we've got those components we talked about earlier 3192.82s - 3194.18s | within the encoder, 3194.18s - 3195.62s | kind of similar components within the reader. 3195.62s - 3199.74s | We've got that core, SAM, we've got expansion modules. 3199.74s - 3201.42s | Each of these things have firmware, 3201.50s - 3203.70s | and all of those things have to be upgraded, 3203.70s - 3206.06s | or ideally they should be able to be upgraded. 3206.06s - 3210.10s | So one of the ways that those things are actually updated 3210.10s - 3212.38s | is firmware upgrade cards. 3213.38s - 3215.66s | The same interfaces that work for the config cards 3215.66s - 3217.02s | also work for firmware upgrades. 3217.02s - 3222.02s | So you've got the NFC, BLE, OSDP, et cetera. 3222.10s - 3224.50s | Although OSDP doesn't have as much market penetration yet 3224.50s - 3227.14s | as we'd like for firmware upgrades, but we're getting there. 3227.14s - 3228.98s | So for firmware upgrade cards, 3228.98s - 3230.82s | there's actually this little plastic bracket 3231.22s - 3232.78s | that you hang because you have to, 3232.78s - 3233.90s | to fit firmware on cards, 3233.90s - 3235.58s | you have to use a lot of cards, actually, 3235.58s - 3238.82s | if anyone remembers splitting RAR files onto floppy disks. 3239.94s - 3243.06s | Bunch of disks to take Age of Empires home from school 3243.06s - 3245.06s | with the fast internet connection, but yeah. 3245.06s - 3248.86s | So you've got a bunch of firmware cards. 3250.34s - 3251.18s | Really didn't get used. 3251.18s - 3254.50s | They were clunky, could


chunk_id: 206_chunk_68
chunk_text:
So one of the ways that those things are actually updated 3210.10s - 3212.38s | is firmware upgrade cards. 3213.38s - 3215.66s | The same interfaces that work for the config cards 3215.66s - 3217.02s | also work for firmware upgrades. 3217.02s - 3222.02s | So you've got the NFC, BLE, OSDP, et cetera. 3222.10s - 3224.50s | Although OSDP doesn't have as much market penetration yet 3224.50s - 3227.14s | as we'd like for firmware upgrades, but we're getting there. 3227.14s - 3228.98s | So for firmware upgrade cards, 3228.98s - 3230.82s | there's actually this little plastic bracket 3231.22s - 3232.78s | that you hang because you have to, 3232.78s - 3233.90s | to fit firmware on cards, 3233.90s - 3235.58s | you have to use a lot of cards, actually, 3235.58s - 3238.82s | if anyone remembers splitting RAR files onto floppy disks. 3239.94s - 3243.06s | Bunch of disks to take Age of Empires home from school 3243.06s - 3245.06s | with the fast internet connection, but yeah. 3245.06s - 3248.86s | So you've got a bunch of firmware cards. 3250.34s - 3251.18s | Really didn't get used. 3251.18s - 3254.50s | They were clunky, could end up with brick readers, 3254.50s - 3256.34s | but ultimately, firmware upgrades 3256.34s - 3260.18s | are still kind of a problem, even in this new platform. 3261.18s - 3265.94s | But as we had mentioned, this platform introduced a SAM, 3265.94s - 3268.10s | otherwise known as a secure application module. 3268.10s - 3270.98s | Its entire job is to protect secrets. 3270.98s - 3274.18s | So it's implemented on top of a secure microcontroller. 3274.18s - 3276.70s | It's designed to be a black box to protect your secrets, 3276.70s - 3278.50s | whether those are cryptographic keys 3278.50s - 3282.62s | or the algorithms or intellectual property 3282.62s - 3284.36s | that makes your product unique. 3284.36s - 3286.62s | You can kind of put that into a black box 3286.62s - 3289.26s | and with using a secure microcontroller, 3289.26s - 3291.74s | its entire job is to just protect those secrets. 3291.74s - 3293.26s | Yeah, do you mind if I touch on this a little bit? 3293.26s - 3294.10s | Yeah, go ahead. 3294.10s - 3297.78s | So this is very similar to the concept of a TPM, basically. 3297.78s - 3300.42s |


chunk_id: 206_chunk_69
chunk_text:
end up with brick readers, 3254.50s - 3256.34s | but ultimately, firmware upgrades 3256.34s - 3260.18s | are still kind of a problem, even in this new platform. 3261.18s - 3265.94s | But as we had mentioned, this platform introduced a SAM, 3265.94s - 3268.10s | otherwise known as a secure application module. 3268.10s - 3270.98s | Its entire job is to protect secrets. 3270.98s - 3274.18s | So it's implemented on top of a secure microcontroller. 3274.18s - 3276.70s | It's designed to be a black box to protect your secrets, 3276.70s - 3278.50s | whether those are cryptographic keys 3278.50s - 3282.62s | or the algorithms or intellectual property 3282.62s - 3284.36s | that makes your product unique. 3284.36s - 3286.62s | You can kind of put that into a black box 3286.62s - 3289.26s | and with using a secure microcontroller, 3289.26s - 3291.74s | its entire job is to just protect those secrets. 3291.74s - 3293.26s | Yeah, do you mind if I touch on this a little bit? 3293.26s - 3294.10s | Yeah, go ahead. 3294.10s - 3297.78s | So this is very similar to the concept of a TPM, basically. 3297.78s - 3300.42s | You have a special processor or a special hardware module. 3300.42s - 3304.18s | Its only job is security, whether it is storing keys 3304.18s - 3306.98s | or performing cryptographic operations, 3306.98s - 3309.10s | and they're designed to resist really, 3309.10s - 3311.50s | really advanced threats. 3311.50s - 3315.46s | This particular SAM was made by Infineon, ultimately. 3315.46s - 3318.82s | It was an SLE88, and one of the first things 3319.38s - 3322.22s | that we wanted to figure out is how do we get access to this 3322.22s - 3325.22s | so we can try to understand it better, ultimately. 3326.22s - 3328.42s | The SAM comes in a lot of different types 3328.42s - 3331.74s | and shapes and sizes for different purposes, right? 3331.74s - 3333.10s | So you have these SIM cards, 3333.10s - 3337.26s | you have different physical form factors that can be used. 3337.26s - 3339.54s | They can go into readers, they can go into printers, 3339.54s - 3342.14s | they can go into third-party products. 3342.14s - 3345.58s | But ultimately, this is the piece of technology 3345.58s - 3348.18s | that is responsible for key


chunk_id: 206_chunk_70
chunk_text:
You have a special processor or a special hardware module. 3300.42s - 3304.18s | Its only job is security, whether it is storing keys 3304.18s - 3306.98s | or performing cryptographic operations, 3306.98s - 3309.10s | and they're designed to resist really, 3309.10s - 3311.50s | really advanced threats. 3311.50s - 3315.46s | This particular SAM was made by Infineon, ultimately. 3315.46s - 3318.82s | It was an SLE88, and one of the first things 3319.38s - 3322.22s | that we wanted to figure out is how do we get access to this 3322.22s - 3325.22s | so we can try to understand it better, ultimately. 3326.22s - 3328.42s | The SAM comes in a lot of different types 3328.42s - 3331.74s | and shapes and sizes for different purposes, right? 3331.74s - 3333.10s | So you have these SIM cards, 3333.10s - 3337.26s | you have different physical form factors that can be used. 3337.26s - 3339.54s | They can go into readers, they can go into printers, 3339.54s - 3342.14s | they can go into third-party products. 3342.14s - 3345.58s | But ultimately, this is the piece of technology 3345.58s - 3348.18s | that is responsible for key management. 3348.54s - 3349.70s | So inside of that SAM, 3349.70s - 3353.18s | which is kind of like a digital vault for keys, 3353.18s - 3356.62s | there are special write-only slots 3356.62s - 3357.98s | that you can only write keys to. 3357.98s - 3361.54s | You're not supposed to be able to read keys out of them. 3361.54s - 3364.60s | And these, as I mentioned, have both official applications 3364.60s - 3365.44s | and you might have heard 3365.44s - 3367.30s | some of the unofficial applications. 3367.30s - 3368.14s | Woo! 3369.34s - 3370.62s | Someone owns a flipper. 3372.14s - 3373.06s | Of course, that's Eric. 3373.06s - 3375.54s | Eric Betts, writer of Cedar. 3375.54s - 3378.02s | If you ever have used that, it's a super cool app. 3378.86s - 3380.74s | We can talk about it in RF Village later. 3380.74s - 3384.78s | But yeah, it's basically this little super secure little guy 3384.78s - 3388.02s | and he handles all the important stuff. 3388.02s - 3389.70s | And so you put it inside of anything 3389.70s - 3391.50s | that you want compatibility with, 3391.50s - 3394.14s | and


chunk_id: 206_chunk_71
chunk_text:
management. 3348.54s - 3349.70s | So inside of that SAM, 3349.70s - 3353.18s | which is kind of like a digital vault for keys, 3353.18s - 3356.62s | there are special write-only slots 3356.62s - 3357.98s | that you can only write keys to. 3357.98s - 3361.54s | You're not supposed to be able to read keys out of them. 3361.54s - 3364.60s | And these, as I mentioned, have both official applications 3364.60s - 3365.44s | and you might have heard 3365.44s - 3367.30s | some of the unofficial applications. 3367.30s - 3368.14s | Woo! 3369.34s - 3370.62s | Someone owns a flipper. 3372.14s - 3373.06s | Of course, that's Eric. 3373.06s - 3375.54s | Eric Betts, writer of Cedar. 3375.54s - 3378.02s | If you ever have used that, it's a super cool app. 3378.86s - 3380.74s | We can talk about it in RF Village later. 3380.74s - 3384.78s | But yeah, it's basically this little super secure little guy 3384.78s - 3388.02s | and he handles all the important stuff. 3388.02s - 3389.70s | And so you put it inside of anything 3389.70s - 3391.50s | that you want compatibility with, 3391.50s - 3394.14s | and there you go, Bob's your uncle. 3394.14s - 3396.70s | The firmware is separated out into a couple of pieces. 3396.70s - 3399.12s | We're not gonna get super deep into the weeds on that 3399.12s - 3400.70s | just for the sake of time. 3400.70s - 3405.10s | But suffice to say, it is a layered implementation 3405.10s - 3409.62s | that builds basically a chain of trust top to bottom 3409.62s - 3411.78s | to try to protect everything along the way. 3411.78s - 3415.50s | So there's multiple steps and keys 3415.50s - 3419.02s | that control what applications run on there, 3419.02s - 3421.78s | what data's accessible by what application, 3421.78s - 3423.26s | so on and so forth. 3423.26s - 3425.50s | But the reason I sped up a little bit there 3425.50s - 3427.50s | is because we wanna make sure we talk about 3427.50s - 3428.94s | the most important part. 3428.94s - 3430.18s | It's the heist. 3430.18s - 3432.50s | And of course, safety first, right? 3432.50s - 3435.58s | So we gotta... 3435.58s - 3438.37s | That's right. 3438.37s - 3441.37s | This is some high intensity stuff here,


chunk_id: 206_chunk_72
chunk_text:
there you go, Bob's your uncle. 3394.14s - 3396.70s | The firmware is separated out into a couple of pieces. 3396.70s - 3399.12s | We're not gonna get super deep into the weeds on that 3399.12s - 3400.70s | just for the sake of time. 3400.70s - 3405.10s | But suffice to say, it is a layered implementation 3405.10s - 3409.62s | that builds basically a chain of trust top to bottom 3409.62s - 3411.78s | to try to protect everything along the way. 3411.78s - 3415.50s | So there's multiple steps and keys 3415.50s - 3419.02s | that control what applications run on there, 3419.02s - 3421.78s | what data's accessible by what application, 3421.78s - 3423.26s | so on and so forth. 3423.26s - 3425.50s | But the reason I sped up a little bit there 3425.50s - 3427.50s | is because we wanna make sure we talk about 3427.50s - 3428.94s | the most important part. 3428.94s - 3430.18s | It's the heist. 3430.18s - 3432.50s | And of course, safety first, right? 3432.50s - 3435.58s | So we gotta... 3435.58s - 3438.37s | That's right. 3438.37s - 3441.37s | This is some high intensity stuff here, right? 3442.25s - 3445.15s | So let's talk about this process a little bit. 3446.65s - 3449.53s | I remember Aaron and I talking a lot 3449.53s - 3452.25s | about one of the favorite aspects 3452.25s - 3455.21s | of hacking this project is what? 3455.21s - 3458.45s | Yeah, so one of the really great parts about this project 3458.45s - 3461.89s | is that a lot of reverse engineering work that you do 3461.89s - 3464.73s | involves sort of unraveling information 3464.73s - 3466.29s | that you already have, right? 3466.65s - 3469.17s | So whether that's reversing a binary in Ghidra 3469.17s - 3470.21s | and you're just trying to figure out 3470.21s - 3473.47s | what a bunch of instructions are doing, 3476.61s - 3477.45s | all the same, right? 3477.45s - 3479.53s | You're trying to make sense of info you already have. 3479.53s - 3481.49s | In this case, right, a lot of what happens 3481.49s - 3484.01s | inside of the SAM is sort of a black box. 3484.01s - 3487.09s | So we have a lot of information, 3487.09s - 3488.49s | but we don't have all the information. 3488.49s


chunk_id: 206_chunk_73
chunk_text:
right? 3442.25s - 3445.15s | So let's talk about this process a little bit. 3446.65s - 3449.53s | I remember Aaron and I talking a lot 3449.53s - 3452.25s | about one of the favorite aspects 3452.25s - 3455.21s | of hacking this project is what? 3455.21s - 3458.45s | Yeah, so one of the really great parts about this project 3458.45s - 3461.89s | is that a lot of reverse engineering work that you do 3461.89s - 3464.73s | involves sort of unraveling information 3464.73s - 3466.29s | that you already have, right? 3466.65s - 3469.17s | So whether that's reversing a binary in Ghidra 3469.17s - 3470.21s | and you're just trying to figure out 3470.21s - 3473.47s | what a bunch of instructions are doing, 3476.61s - 3477.45s | all the same, right? 3477.45s - 3479.53s | You're trying to make sense of info you already have. 3479.53s - 3481.49s | In this case, right, a lot of what happens 3481.49s - 3484.01s | inside of the SAM is sort of a black box. 3484.01s - 3487.09s | So we have a lot of information, 3487.09s - 3488.49s | but we don't have all the information. 3488.49s - 3490.65s | And so you really have to like put yourself 3490.65s - 3493.61s | into the headspace of who built this. 3493.61s - 3498.61s | And if they did X, Y, and Z, 3499.17s - 3502.21s | then how might they have designed some other thing? 3502.21s - 3504.37s | And you have to make these really educated guesses 3504.37s - 3506.33s | and put yourself in the shoes of the person who built it. 3506.33s - 3507.53s | And you gotta really stretch yourself. 3507.53s - 3508.87s | It crosses a lot of domains. 3508.87s - 3511.31s | It's not just software, it's hardware, it's firmware. 3511.31s - 3513.09s | It's a lot of really cool stuff. 3513.09s - 3515.27s | So first we need to think about this. 3515.27s - 3516.65s | How do we want to approach this? 3516.65s - 3519.01s | Well, where are the master keys? 3519.01s - 3520.37s | Let's think through all the places 3520.37s - 3522.77s | that keys are used and stored. 3522.77s - 3525.45s | Let's think through what kind of operations 3525.45s - 3528.89s | and what commands would have to use those keys. 3528.89s - 3532.09s


chunk_id: 206_chunk_74
chunk_text:
- 3490.65s | And so you really have to like put yourself 3490.65s - 3493.61s | into the headspace of who built this. 3493.61s - 3498.61s | And if they did X, Y, and Z, 3499.17s - 3502.21s | then how might they have designed some other thing? 3502.21s - 3504.37s | And you have to make these really educated guesses 3504.37s - 3506.33s | and put yourself in the shoes of the person who built it. 3506.33s - 3507.53s | And you gotta really stretch yourself. 3507.53s - 3508.87s | It crosses a lot of domains. 3508.87s - 3511.31s | It's not just software, it's hardware, it's firmware. 3511.31s - 3513.09s | It's a lot of really cool stuff. 3513.09s - 3515.27s | So first we need to think about this. 3515.27s - 3516.65s | How do we want to approach this? 3516.65s - 3519.01s | Well, where are the master keys? 3519.01s - 3520.37s | Let's think through all the places 3520.37s - 3522.77s | that keys are used and stored. 3522.77s - 3525.45s | Let's think through what kind of operations 3525.45s - 3528.89s | and what commands would have to use those keys. 3528.89s - 3532.09s | And then how do those keys get there in the first place? 3532.09s - 3534.17s | We gotta understand the whole process 3534.17s - 3537.45s | and see if we can find any vulnerabilities 3537.45s - 3539.01s | in the armor, so to speak. 3539.01s - 3540.53s | So we identified our targets, 3540.53s - 3542.81s | which is anything with keys, of course. 3542.81s - 3546.09s | That includes standard readers, desktop USB readers, 3546.09s - 3548.25s | embedded readers, encoders, of course. 3548.25s - 3551.05s | That's one of the big things we're talking about today. 3551.05s - 3552.73s | Configuration cards. 3553.57s - 3555.29s | The common denominator in all of these things 3555.29s - 3558.17s | is that iClass SE secure processor. 3558.17s - 3562.33s | It's that SAM, because that's the one trusted piece, 3562.33s - 3565.81s | that component that is allowed to do all this stuff. 3565.81s - 3568.83s | So how do we turn unknowns into knowns? 3568.83s - 3572.09s | Well, we gotta start touching hardware, right? 3572.09s - 3573.69s | So we need to get inside, 3573.69s - 3577.21s | see what we can find out about what chips


chunk_id: 206_chunk_75
chunk_text:
| And then how do those keys get there in the first place? 3532.09s - 3534.17s | We gotta understand the whole process 3534.17s - 3537.45s | and see if we can find any vulnerabilities 3537.45s - 3539.01s | in the armor, so to speak. 3539.01s - 3540.53s | So we identified our targets, 3540.53s - 3542.81s | which is anything with keys, of course. 3542.81s - 3546.09s | That includes standard readers, desktop USB readers, 3546.09s - 3548.25s | embedded readers, encoders, of course. 3548.25s - 3551.05s | That's one of the big things we're talking about today. 3551.05s - 3552.73s | Configuration cards. 3553.57s - 3555.29s | The common denominator in all of these things 3555.29s - 3558.17s | is that iClass SE secure processor. 3558.17s - 3562.33s | It's that SAM, because that's the one trusted piece, 3562.33s - 3565.81s | that component that is allowed to do all this stuff. 3565.81s - 3568.83s | So how do we turn unknowns into knowns? 3568.83s - 3572.09s | Well, we gotta start touching hardware, right? 3572.09s - 3573.69s | So we need to get inside, 3573.69s - 3577.21s | see what we can find out about what chips are used, 3577.21s - 3580.21s | see if we can tap into some communication buses, 3580.21s - 3581.85s | and just start trying to understand 3581.85s - 3584.71s | the language that it speaks. 3584.71s - 3587.17s | On the firmware side, we wanna try to get a copy 3587.17s - 3589.09s | of anything we can get our hands on 3589.09s - 3591.37s | and start reverse engineering, right? 3591.37s - 3596.25s | That is like Aaron's and Nick's bread and butter. 3596.25s - 3599.75s | I can poke hot pokey things at hardware all day long, 3599.75s - 3602.05s | I'll cut things apart, but honestly, 3602.05s - 3605.57s | when it comes to the actual hardcore reverse engineering, 3605.57s - 3608.89s | I still rely on geniuses like Aaron and Nick. 3608.89s - 3613.13s | Otherwise, I'm just not as effective on my own. 3613.13s - 3617.01s | But all the normal techniques that you'd apply, 3617.01s - 3619.41s | we had to apply to these different domains, 3619.41s - 3622.39s | software, firmware, hardware, et cetera. 3623.29s - 3627.17s | As a fun story, while we were working on this, 3627.17s - 3628.85s | one of


chunk_id: 206_chunk_76
chunk_text:
are used, 3577.21s - 3580.21s | see if we can tap into some communication buses, 3580.21s - 3581.85s | and just start trying to understand 3581.85s - 3584.71s | the language that it speaks. 3584.71s - 3587.17s | On the firmware side, we wanna try to get a copy 3587.17s - 3589.09s | of anything we can get our hands on 3589.09s - 3591.37s | and start reverse engineering, right? 3591.37s - 3596.25s | That is like Aaron's and Nick's bread and butter. 3596.25s - 3599.75s | I can poke hot pokey things at hardware all day long, 3599.75s - 3602.05s | I'll cut things apart, but honestly, 3602.05s - 3605.57s | when it comes to the actual hardcore reverse engineering, 3605.57s - 3608.89s | I still rely on geniuses like Aaron and Nick. 3608.89s - 3613.13s | Otherwise, I'm just not as effective on my own. 3613.13s - 3617.01s | But all the normal techniques that you'd apply, 3617.01s - 3619.41s | we had to apply to these different domains, 3619.41s - 3622.39s | software, firmware, hardware, et cetera. 3623.29s - 3627.17s | As a fun story, while we were working on this, 3627.17s - 3628.85s | one of our mutual friends, actually, 3628.85s - 3630.53s | who we didn't know was a mutual friend 3630.53s - 3633.03s | until we started this project, Vlad, 3634.49s - 3638.85s | he, as a side quest, decided to look at some readers, 3639.69s - 3641.33s | and there was this really fun exchange that we had 3641.33s - 3643.69s | that he gave me permission to post, 3643.69s - 3646.15s | and he cut it apart and he just sends me 3646.15s - 3648.37s | this photo out of the blue, and he says, 3648.37s - 3650.85s | Bobik, what the fuck is this powder? 3650.85s - 3651.89s | The reader's full of it. 3651.89s - 3654.85s | Does HID literally put a felony amount 3654.85s - 3656.81s | of cocaine in every reader? 3656.81s - 3659.49s | And I corrected him, of course, that's clearly anthrax. 3659.49s - 3662.73s | That's how HID takes out their researchers, 3662.73s - 3665.41s | and of course, that explains a lot. 3665.41s - 3667.69s | But no, that's not the case. 3668.13s - 3672.65s | This is just epoxy fill, serves a couple different purposes, 3672.65s - 3676.73s | from weather resistance to


chunk_id: 206_chunk_77
chunk_text:
our mutual friends, actually, 3628.85s - 3630.53s | who we didn't know was a mutual friend 3630.53s - 3633.03s | until we started this project, Vlad, 3634.49s - 3638.85s | he, as a side quest, decided to look at some readers, 3639.69s - 3641.33s | and there was this really fun exchange that we had 3641.33s - 3643.69s | that he gave me permission to post, 3643.69s - 3646.15s | and he cut it apart and he just sends me 3646.15s - 3648.37s | this photo out of the blue, and he says, 3648.37s - 3650.85s | Bobik, what the fuck is this powder? 3650.85s - 3651.89s | The reader's full of it. 3651.89s - 3654.85s | Does HID literally put a felony amount 3654.85s - 3656.81s | of cocaine in every reader? 3656.81s - 3659.49s | And I corrected him, of course, that's clearly anthrax. 3659.49s - 3662.73s | That's how HID takes out their researchers, 3662.73s - 3665.41s | and of course, that explains a lot. 3665.41s - 3667.69s | But no, that's not the case. 3668.13s - 3672.65s | This is just epoxy fill, serves a couple different purposes, 3672.65s - 3676.73s | from weather resistance to making it harder 3676.73s - 3680.55s | to get to the damn thing, as evidenced by these photos. 3681.45s - 3682.75s | But that was just the hardware piece. 3682.75s - 3684.93s | On the software piece, we had tons 3684.93s - 3686.77s | of other tools as well, right? 3686.77s - 3690.93s | We had Aaron and Nick breaking out DotPeak and Jeb. 3690.93s - 3693.41s | I was breaking out the Salialogic analyzer, 3693.41s - 3694.69s | and we were doing all this remotely, 3694.73s - 3697.97s | like during COVID, you were in San Francisco, 3697.97s - 3700.61s | I was in Phoenix, and tons of screen sharing, 3700.61s - 3703.01s | way, way too much screen sharing. 3703.01s - 3708.01s | So lots of tiny wires, lots of hot, dangerous things, 3708.89s - 3711.69s | blood, sweat, and tears, patients, and of course, 3711.69s - 3715.21s | a very, very healthy slash unhealthy dose 3715.21s - 3717.09s | of neurodivergent persistence. 3719.33s - 3722.09s | FCC Docs, if you've ever been curious, 3722.09s - 3725.25s | it's a great resource for finding out 3725.25s - 3728.21s | preliminary information about hardware. 3728.21s - 3729.41s | Anything


chunk_id: 206_chunk_78
chunk_text:
making it harder 3676.73s - 3680.55s | to get to the damn thing, as evidenced by these photos. 3681.45s - 3682.75s | But that was just the hardware piece. 3682.75s - 3684.93s | On the software piece, we had tons 3684.93s - 3686.77s | of other tools as well, right? 3686.77s - 3690.93s | We had Aaron and Nick breaking out DotPeak and Jeb. 3690.93s - 3693.41s | I was breaking out the Salialogic analyzer, 3693.41s - 3694.69s | and we were doing all this remotely, 3694.73s - 3697.97s | like during COVID, you were in San Francisco, 3697.97s - 3700.61s | I was in Phoenix, and tons of screen sharing, 3700.61s - 3703.01s | way, way too much screen sharing. 3703.01s - 3708.01s | So lots of tiny wires, lots of hot, dangerous things, 3708.89s - 3711.69s | blood, sweat, and tears, patients, and of course, 3711.69s - 3715.21s | a very, very healthy slash unhealthy dose 3715.21s - 3717.09s | of neurodivergent persistence. 3719.33s - 3722.09s | FCC Docs, if you've ever been curious, 3722.09s - 3725.25s | it's a great resource for finding out 3725.25s - 3728.21s | preliminary information about hardware. 3728.21s - 3729.41s | Anything that has a radio in it 3729.41s - 3732.29s | is required to go through FCC certification. 3732.29s - 3734.77s | So you sometimes get leaks of products 3734.77s - 3738.29s | well in advance of the product actually coming out. 3738.29s - 3740.01s | And I remember back in 2016, 3740.01s - 3743.27s | there was this article on a tech site, 3743.27s - 3747.05s | like, oh, Apple is working on this mystery device. 3747.05s - 3748.93s | It has NFC and Bluetooth, 3748.93s - 3751.17s | and maybe it's a new crazy airport extreme. 3751.17s - 3752.49s | And I looked at the sticker and I'm like, 3752.49s - 3756.53s | dude, it says D1, D0, it's weekend. 3756.53s - 3758.17s | It's just a card reader. 3758.17s - 3760.21s | And yes, it was, it was just a card reader 3760.21s - 3763.05s | as it came out six to eight months later, 3763.05s - 3765.01s | and it's a custom piece for Apple 3765.01s - 3768.21s | that they use in their facility, but we digress. 3768.21s - 3771.49s | We did FCC research on the iClass SE platform. 3771.49s - 3774.29s | We got


chunk_id: 206_chunk_79
chunk_text:
that has a radio in it 3729.41s - 3732.29s | is required to go through FCC certification. 3732.29s - 3734.77s | So you sometimes get leaks of products 3734.77s - 3738.29s | well in advance of the product actually coming out. 3738.29s - 3740.01s | And I remember back in 2016, 3740.01s - 3743.27s | there was this article on a tech site, 3743.27s - 3747.05s | like, oh, Apple is working on this mystery device. 3747.05s - 3748.93s | It has NFC and Bluetooth, 3748.93s - 3751.17s | and maybe it's a new crazy airport extreme. 3751.17s - 3752.49s | And I looked at the sticker and I'm like, 3752.49s - 3756.53s | dude, it says D1, D0, it's weekend. 3756.53s - 3758.17s | It's just a card reader. 3758.17s - 3760.21s | And yes, it was, it was just a card reader 3760.21s - 3763.05s | as it came out six to eight months later, 3763.05s - 3765.01s | and it's a custom piece for Apple 3765.01s - 3768.21s | that they use in their facility, but we digress. 3768.21s - 3771.49s | We did FCC research on the iClass SE platform. 3771.49s - 3774.29s | We got some kind of blurry potato quality photos, 3774.29s - 3776.41s | so we had to get to that ourselves. 3776.41s - 3778.33s | We tried a lot of stuff, guys. 3778.33s - 3780.53s | We tried cutting acetone. 3780.53s - 3783.09s | I tried boiling readers in my apartment 3783.97s - 3787.37s | to try to heat up the epoxy and make it more brittle. 3787.37s - 3790.65s | I remember hitting it with like 1,200 degrees of hot air 3790.65s - 3794.23s | and trying to chip away at the epoxy, and it just sucks. 3795.09s - 3796.17s | But that worked. 3796.17s - 3799.37s | I found that hot air embrittled the epoxy. 3799.37s - 3801.05s | It did not smell good. 3801.05s - 3804.77s | I probably have some stuff going on in my head as a result, 3804.77s - 3807.21s | but I'm here and you're here, 3807.21s - 3809.29s | and we're gonna have a good time. 3809.29s - 3813.85s | So here's a photo that actually one of our close friends, 3813.85s - 3817.69s | Kevin, 0xFFFF, took when he did the same process, 3817.69s - 3819.77s | and he's just a master at


chunk_id: 206_chunk_80
chunk_text:
some kind of blurry potato quality photos, 3774.29s - 3776.41s | so we had to get to that ourselves. 3776.41s - 3778.33s | We tried a lot of stuff, guys. 3778.33s - 3780.53s | We tried cutting acetone. 3780.53s - 3783.09s | I tried boiling readers in my apartment 3783.97s - 3787.37s | to try to heat up the epoxy and make it more brittle. 3787.37s - 3790.65s | I remember hitting it with like 1,200 degrees of hot air 3790.65s - 3794.23s | and trying to chip away at the epoxy, and it just sucks. 3795.09s - 3796.17s | But that worked. 3796.17s - 3799.37s | I found that hot air embrittled the epoxy. 3799.37s - 3801.05s | It did not smell good. 3801.05s - 3804.77s | I probably have some stuff going on in my head as a result, 3804.77s - 3807.21s | but I'm here and you're here, 3807.21s - 3809.29s | and we're gonna have a good time. 3809.29s - 3813.85s | So here's a photo that actually one of our close friends, 3813.85s - 3817.69s | Kevin, 0xFFFF, took when he did the same process, 3817.69s - 3819.77s | and he's just a master at this stuff, 3819.77s - 3821.97s | and you can see it's a little bit clearer, 3821.97s - 3824.49s | and of course, there's our SAM, right? 3824.49s - 3826.69s | That protects the secret things. 3826.69s - 3828.37s | That's the thing that we're trying to hack. 3828.37s - 3829.85s | There's other chips in there as well. 3829.85s - 3833.01s | We have the RF front end, the HF front end, 3833.01s - 3836.45s | the main microcontroller, which we refer to as core, 3836.45s - 3840.29s | and we wanted to figure out, how do we get to these SAMs? 3840.29s - 3842.05s | How do we get access to more of them? 3842.05s - 3843.37s | And readers aren't cheap, 3843.37s - 3845.21s | so we've gotta try to figure it out. 3845.21s - 3847.73s | What I ultimately, by accident, figured out 3847.73s - 3851.49s | is that by a weird quirk of manufacturing, 3851.49s - 3854.93s | on the back of the reader, if you'll notice, 3854.93s - 3857.93s | right over here, there's this debug port 3857.93s - 3860.55s | that's actually used as an expansion port 3860.55s - 3864.17s | for external modules


chunk_id: 206_chunk_81
chunk_text:
this stuff, 3819.77s - 3821.97s | and you can see it's a little bit clearer, 3821.97s - 3824.49s | and of course, there's our SAM, right? 3824.49s - 3826.69s | That protects the secret things. 3826.69s - 3828.37s | That's the thing that we're trying to hack. 3828.37s - 3829.85s | There's other chips in there as well. 3829.85s - 3833.01s | We have the RF front end, the HF front end, 3833.01s - 3836.45s | the main microcontroller, which we refer to as core, 3836.45s - 3840.29s | and we wanted to figure out, how do we get to these SAMs? 3840.29s - 3842.05s | How do we get access to more of them? 3842.05s - 3843.37s | And readers aren't cheap, 3843.37s - 3845.21s | so we've gotta try to figure it out. 3845.21s - 3847.73s | What I ultimately, by accident, figured out 3847.73s - 3851.49s | is that by a weird quirk of manufacturing, 3851.49s - 3854.93s | on the back of the reader, if you'll notice, 3854.93s - 3857.93s | right over here, there's this debug port 3857.93s - 3860.55s | that's actually used as an expansion port 3860.55s - 3864.17s | for external modules like Bluetooth and stuff like that, 3864.17s - 3866.49s | and something about the manufacturing process 3866.49s - 3870.01s | required them to put a little plastic bubble in that area, 3870.01s - 3871.37s | and wouldn't you know it? 3871.37s - 3873.41s | The SAM's right in that bubble 3873.41s - 3875.47s | with no epoxy surrounding it. 3875.47s - 3877.73s | So what I found is I was able to use 3877.73s - 3879.09s | one of my new best friends, 3879.09s - 3881.89s | that ultrasonic knife on the right-hand side, 3881.89s - 3885.75s | and the official SAM recovery guide tool, 3885.75s - 3888.61s | which is just a piece of cardboard that I cut. 3888.61s - 3890.71s | Here's the 1.1 version. 3890.71s - 3892.93s | It's the same thing, basically, 3892.93s - 3894.45s | and I'll show you the process. 3894.45s - 3895.77s | This is sped up three times 3895.77s - 3899.47s | because this is already way too long, let's be honest. 3899.47s - 3902.45s | So I'm just drawing a little rectangle on there, 3902.45s - 3903.99s | and I'm using the ultrasonic knife 3903.99s - 3907.21s | to cut through


chunk_id: 206_chunk_82
chunk_text:
like Bluetooth and stuff like that, 3864.17s - 3866.49s | and something about the manufacturing process 3866.49s - 3870.01s | required them to put a little plastic bubble in that area, 3870.01s - 3871.37s | and wouldn't you know it? 3871.37s - 3873.41s | The SAM's right in that bubble 3873.41s - 3875.47s | with no epoxy surrounding it. 3875.47s - 3877.73s | So what I found is I was able to use 3877.73s - 3879.09s | one of my new best friends, 3879.09s - 3881.89s | that ultrasonic knife on the right-hand side, 3881.89s - 3885.75s | and the official SAM recovery guide tool, 3885.75s - 3888.61s | which is just a piece of cardboard that I cut. 3888.61s - 3890.71s | Here's the 1.1 version. 3890.71s - 3892.93s | It's the same thing, basically, 3892.93s - 3894.45s | and I'll show you the process. 3894.45s - 3895.77s | This is sped up three times 3895.77s - 3899.47s | because this is already way too long, let's be honest. 3899.47s - 3902.45s | So I'm just drawing a little rectangle on there, 3902.45s - 3903.99s | and I'm using the ultrasonic knife 3903.99s - 3907.21s | to cut through that top layer of epoxy and plastic, 3907.21s - 3909.53s | and it goes pretty quick, actually. 3909.53s - 3910.53s | I love this tool. 3910.53s - 3912.13s | If you do a lot of hardware hacking, 3912.13s - 3913.49s | Wonder Cutter, buy it. 3913.49s - 3915.03s | It's freaking awesome. 3915.93s - 3918.19s | And you saw I sliced through it there pretty quick, 3918.19s - 3922.29s | even at 3X, and then boom, the board is exposed. 3922.29s - 3924.93s | Now that tool on the right, that's pretty cool, actually. 3924.93s - 3927.45s | Those of you who wear glasses, like me, for a long time, 3927.45s - 3930.85s | might remember seeing one in your optometrist's office 3930.85s - 3932.17s | way back in the day, 3932.17s - 3935.05s | and it's just a bath of hot glass beads, 3935.05s - 3937.25s | and I used that to preheat the reader 3937.25s - 3939.93s | to make it easier to then remove that SAM 3939.93s - 3941.53s | using the hot air station. 3941.53s - 3943.37s | And so just after a little bit of time, 3943.37s - 3945.03s | we're able to recover that


chunk_id: 206_chunk_83
chunk_text:
that top layer of epoxy and plastic, 3907.21s - 3909.53s | and it goes pretty quick, actually. 3909.53s - 3910.53s | I love this tool. 3910.53s - 3912.13s | If you do a lot of hardware hacking, 3912.13s - 3913.49s | Wonder Cutter, buy it. 3913.49s - 3915.03s | It's freaking awesome. 3915.93s - 3918.19s | And you saw I sliced through it there pretty quick, 3918.19s - 3922.29s | even at 3X, and then boom, the board is exposed. 3922.29s - 3924.93s | Now that tool on the right, that's pretty cool, actually. 3924.93s - 3927.45s | Those of you who wear glasses, like me, for a long time, 3927.45s - 3930.85s | might remember seeing one in your optometrist's office 3930.85s - 3932.17s | way back in the day, 3932.17s - 3935.05s | and it's just a bath of hot glass beads, 3935.05s - 3937.25s | and I used that to preheat the reader 3937.25s - 3939.93s | to make it easier to then remove that SAM 3939.93s - 3941.53s | using the hot air station. 3941.53s - 3943.37s | And so just after a little bit of time, 3943.37s - 3945.03s | we're able to recover that SAM, 3945.03s - 3948.29s | and that was a very nice, efficient process 3948.29s - 3950.37s | of trying to recover SAMs, 3950.37s - 3952.85s | and to be fair, this looks really slick, 3952.85s - 3955.09s | but we went through a lot. 3955.09s - 3958.37s | I damaged a lot and spent a lot of money 3958.37s - 3959.89s | to get to that point. 3959.89s - 3961.79s | I even had a little SAM cemetery, 3961.79s - 3964.97s | and then I ran out of room, and I just stopped. 3964.97s - 3967.61s | I had a whole pile of these dead, damn things. 3968.73s - 3971.33s | But ultimately, what worked was choosing the right reader 3971.33s - 3974.27s | and doing all the things, and great success, right? 3974.27s - 3977.65s | That's actually a pile of SAMs I successfully extracted 3977.65s - 3979.69s | out of a bunch of readers, and all of them worked. 3979.77s - 3981.17s | I was very proud of it. 3981.17s - 3983.57s | But we wanted to see inside, because why not? 3983.57s - 3986.29s | And so I live in Las Vegas. 3986.29s - 3988.17s | There's


chunk_id: 206_chunk_84
chunk_text:
SAM, 3945.03s - 3948.29s | and that was a very nice, efficient process 3948.29s - 3950.37s | of trying to recover SAMs, 3950.37s - 3952.85s | and to be fair, this looks really slick, 3952.85s - 3955.09s | but we went through a lot. 3955.09s - 3958.37s | I damaged a lot and spent a lot of money 3958.37s - 3959.89s | to get to that point. 3959.89s - 3961.79s | I even had a little SAM cemetery, 3961.79s - 3964.97s | and then I ran out of room, and I just stopped. 3964.97s - 3967.61s | I had a whole pile of these dead, damn things. 3968.73s - 3971.33s | But ultimately, what worked was choosing the right reader 3971.33s - 3974.27s | and doing all the things, and great success, right? 3974.27s - 3977.65s | That's actually a pile of SAMs I successfully extracted 3977.65s - 3979.69s | out of a bunch of readers, and all of them worked. 3979.77s - 3981.17s | I was very proud of it. 3981.17s - 3983.57s | But we wanted to see inside, because why not? 3983.57s - 3986.29s | And so I live in Las Vegas. 3986.29s - 3988.17s | There's a really cool local company here 3988.17s - 3989.85s | called Full Spectrum Laser. 3989.85s - 3992.57s | They make really cool stuff, and for some reason, 3992.57s - 3995.49s | they let me play with one of their fancy UV lasers, 3995.49s - 3999.29s | and I learned that you can decapsulate an IC 3999.29s - 4001.59s | with UV really, really fast. 4002.45s - 4006.49s | It is destructive, of course, but that worked a treat, 4006.49s - 4008.37s | so thank you to Full Spectrum Laser 4008.37s - 4010.57s | for letting us do that. 4010.57s - 4012.69s | But these are some dye shots that Kevin took 4012.69s - 4016.13s | when he did a little acid bath process himself, 4016.13s - 4018.45s | and that's what proved that this was, in fact, 4018.45s - 4022.97s | the Infineon SLE88, and you kind of, 4022.97s - 4024.41s | you get where we're going with this. 4024.41s - 4026.13s | I'm gonna skip a couple of slides here 4026.13s - 4027.13s | just for the sake of time. 4027.13s - 4029.69s | We want to show you the cool demo. 4029.69s - 4032.65s | But the Artemis


chunk_id: 206_chunk_85
chunk_text:
a really cool local company here 3988.17s - 3989.85s | called Full Spectrum Laser. 3989.85s - 3992.57s | They make really cool stuff, and for some reason, 3992.57s - 3995.49s | they let me play with one of their fancy UV lasers, 3995.49s - 3999.29s | and I learned that you can decapsulate an IC 3999.29s - 4001.59s | with UV really, really fast. 4002.45s - 4006.49s | It is destructive, of course, but that worked a treat, 4006.49s - 4008.37s | so thank you to Full Spectrum Laser 4008.37s - 4010.57s | for letting us do that. 4010.57s - 4012.69s | But these are some dye shots that Kevin took 4012.69s - 4016.13s | when he did a little acid bath process himself, 4016.13s - 4018.45s | and that's what proved that this was, in fact, 4018.45s - 4022.97s | the Infineon SLE88, and you kind of, 4022.97s - 4024.41s | you get where we're going with this. 4024.41s - 4026.13s | I'm gonna skip a couple of slides here 4026.13s - 4027.13s | just for the sake of time. 4027.13s - 4029.69s | We want to show you the cool demo. 4029.69s - 4032.65s | But the Artemis platform was the codename 4032.65s - 4036.73s | for all of that hardware, and as was mentioned earlier, 4036.73s - 4041.73s | it uses SNMPv3 messages to talk to different endpoints. 4042.13s - 4044.01s | If you're curious about this more, 4044.01s - 4045.17s | come talk to us later. 4045.17s - 4047.85s | Maybe we can share a little bit more about it. 4048.85s - 4052.87s | But do you have a quick thing to mention about this? 4052.87s - 4054.25s | I want to make sure we have enough time 4054.25s - 4055.45s | to get the demos in. 4055.45s - 4057.57s | Yeah, like standards-based protocols, 4057.57s - 4060.81s | using an efficient protocol for an embedded system like this 4060.81s - 4062.25s | provides pretty good security, actually. 4062.25s - 4064.37s | It's a really interesting use, so yeah. 4064.37s - 4065.73s | Yeah. 4065.73s - 4067.97s | There's a couple different roles that we discovered, right? 4067.97s - 4070.41s | You know, there's OEM admin, there's HID admin. 4070.41s - 4071.61s | These are users, basically, 4071.61s - 4073.81s | that have different levels of access, 4073.81s - 4077.37s | and that was critical for


chunk_id: 206_chunk_86
chunk_text:
platform was the codename 4032.65s - 4036.73s | for all of that hardware, and as was mentioned earlier, 4036.73s - 4041.73s | it uses SNMPv3 messages to talk to different endpoints. 4042.13s - 4044.01s | If you're curious about this more, 4044.01s - 4045.17s | come talk to us later. 4045.17s - 4047.85s | Maybe we can share a little bit more about it. 4048.85s - 4052.87s | But do you have a quick thing to mention about this? 4052.87s - 4054.25s | I want to make sure we have enough time 4054.25s - 4055.45s | to get the demos in. 4055.45s - 4057.57s | Yeah, like standards-based protocols, 4057.57s - 4060.81s | using an efficient protocol for an embedded system like this 4060.81s - 4062.25s | provides pretty good security, actually. 4062.25s - 4064.37s | It's a really interesting use, so yeah. 4064.37s - 4065.73s | Yeah. 4065.73s - 4067.97s | There's a couple different roles that we discovered, right? 4067.97s - 4070.41s | You know, there's OEM admin, there's HID admin. 4070.41s - 4071.61s | These are users, basically, 4071.61s - 4073.81s | that have different levels of access, 4073.81s - 4077.37s | and that was critical for the exploit itself, actually, 4077.37s - 4078.19s | right? 4078.19s - 4080.73s | Yeah, no, that very much was critical, 4080.73s - 4085.13s | and yes, SNMPv3, while it is primarily a network technology, 4085.13s - 4087.11s | is actually a really good, 4087.11s - 4089.25s | it's used quite well in this platform. 4089.25s - 4091.29s | So all this stuff is built on Java cards, 4091.29s - 4092.53s | which if you've never played with, 4092.53s - 4093.53s | they're super, super cool, 4093.53s - 4095.77s | but they're used for all sorts of different applications, 4095.77s - 4099.97s | everything from credit cards to access control, et cetera. 4099.97s - 4101.89s | The config cards use them as well, 4101.89s - 4103.81s | so you can update firmware, 4103.81s - 4107.49s | and change all those settings, that used Java card. 4107.49s - 4109.81s | But config card operations, Nick, 4109.81s - 4111.73s | take it away and punch through this, 4111.73s - 4112.77s | because this is important. 4112.77s - 4114.63s | When a config card is encoded, 4114.63s - 4115.61s | the app is initialized, 4115.61s - 4117.03s | it's told how much space it


chunk_id: 206_chunk_87
chunk_text:
the exploit itself, actually, 4077.37s - 4078.19s | right? 4078.19s - 4080.73s | Yeah, no, that very much was critical, 4080.73s - 4085.13s | and yes, SNMPv3, while it is primarily a network technology, 4085.13s - 4087.11s | is actually a really good, 4087.11s - 4089.25s | it's used quite well in this platform. 4089.25s - 4091.29s | So all this stuff is built on Java cards, 4091.29s - 4092.53s | which if you've never played with, 4092.53s - 4093.53s | they're super, super cool, 4093.53s - 4095.77s | but they're used for all sorts of different applications, 4095.77s - 4099.97s | everything from credit cards to access control, et cetera. 4099.97s - 4101.89s | The config cards use them as well, 4101.89s - 4103.81s | so you can update firmware, 4103.81s - 4107.49s | and change all those settings, that used Java card. 4107.49s - 4109.81s | But config card operations, Nick, 4109.81s - 4111.73s | take it away and punch through this, 4111.73s - 4112.77s | because this is important. 4112.77s - 4114.63s | When a config card is encoded, 4114.63s - 4115.61s | the app is initialized, 4115.61s - 4117.03s | it's told how much space it should have, 4117.03s - 4120.33s | and then after that happens, the encoder says, 4120.33s - 4121.95s | okay, here are the SNMP keys you should use 4121.95s - 4123.59s | when you generate messages, 4123.59s - 4125.43s | and then loads the configuration data, 4125.43s - 4127.39s | that can be keys, or configuration objects, 4127.39s - 4129.39s | things like LED color, et cetera. 4129.39s - 4132.71s | So when that process is finished, 4132.71s - 4134.47s | and you actually go to use it at a reader, 4134.47s - 4135.87s | the reader selects the applet, 4135.87s - 4139.83s | the reader itself sends the SAM engine ID 4139.83s - 4141.31s | that it uses for the SNMPv3, 4141.31s - 4144.95s | and then the username that the config card should use 4144.95s - 4146.59s | to actually generate those messages, 4146.59s - 4149.39s | and then the reader says, okay, give me messages, 4149.39s - 4151.53s | and now we're at the heist, essentially. 4152.37s - 4155.21s | So we looked at that set SNMP keys portion, 4155.21s - 4158.37s | and found that it requires a secure channel to do that, 4158.37s - 4160.89s |


chunk_id: 206_chunk_88
chunk_text:
should have, 4117.03s - 4120.33s | and then after that happens, the encoder says, 4120.33s - 4121.95s | okay, here are the SNMP keys you should use 4121.95s - 4123.59s | when you generate messages, 4123.59s - 4125.43s | and then loads the configuration data, 4125.43s - 4127.39s | that can be keys, or configuration objects, 4127.39s - 4129.39s | things like LED color, et cetera. 4129.39s - 4132.71s | So when that process is finished, 4132.71s - 4134.47s | and you actually go to use it at a reader, 4134.47s - 4135.87s | the reader selects the applet, 4135.87s - 4139.83s | the reader itself sends the SAM engine ID 4139.83s - 4141.31s | that it uses for the SNMPv3, 4141.31s - 4144.95s | and then the username that the config card should use 4144.95s - 4146.59s | to actually generate those messages, 4146.59s - 4149.39s | and then the reader says, okay, give me messages, 4149.39s - 4151.53s | and now we're at the heist, essentially. 4152.37s - 4155.21s | So we looked at that set SNMP keys portion, 4155.21s - 4158.37s | and found that it requires a secure channel to do that, 4158.37s - 4160.89s | but if you have a secure channel, 4160.89s - 4163.19s | you can actually change the keys without knowing them, 4163.19s - 4164.89s | without deleting data. 4164.89s - 4167.13s | So if you find a card 4167.13s - 4169.33s | that you can establish a secure channel with, 4169.33s - 4174.17s | you can then use that to set SNMP keys to zero, 4174.17s - 4177.29s | and then when you go and pretend to be a reader, 4177.29s - 4179.33s | you can give it a SAM session ID, 4179.33s - 4180.25s | you can give it a username, 4180.25s - 4181.25s | and then you can just get messages 4181.97s - 4183.53s | that are encrypted with zeros. 4183.53s - 4187.37s | So here is a demonstration of that exact thing happening, 4187.37s - 4190.65s | and in this case, we'll take the config card, 4190.65s - 4194.89s | we'll use it with this standard PCSC reader, 4194.89s - 4198.73s | and in this case, we're gonna take the script here 4198.73s - 4202.39s | to establish a secure channel and zero out those keys, 4202.39s - 4205.53s | and let me just go ahead and skip


chunk_id: 206_chunk_89
chunk_text:
but if you have a secure channel, 4160.89s - 4163.19s | you can actually change the keys without knowing them, 4163.19s - 4164.89s | without deleting data. 4164.89s - 4167.13s | So if you find a card 4167.13s - 4169.33s | that you can establish a secure channel with, 4169.33s - 4174.17s | you can then use that to set SNMP keys to zero, 4174.17s - 4177.29s | and then when you go and pretend to be a reader, 4177.29s - 4179.33s | you can give it a SAM session ID, 4179.33s - 4180.25s | you can give it a username, 4180.25s - 4181.25s | and then you can just get messages 4181.97s - 4183.53s | that are encrypted with zeros. 4183.53s - 4187.37s | So here is a demonstration of that exact thing happening, 4187.37s - 4190.65s | and in this case, we'll take the config card, 4190.65s - 4194.89s | we'll use it with this standard PCSC reader, 4194.89s - 4198.73s | and in this case, we're gonna take the script here 4198.73s - 4202.39s | to establish a secure channel and zero out those keys, 4202.39s - 4205.53s | and let me just go ahead and skip ahead. 4205.53s - 4206.37s | Oops, sorry. 4206.37s - 4220.57s | Oh, too far. 4220.57s - 4222.53s | I'm trying to zoom ahead. 4222.53s - 4228.35s | All right, go ahead. 4229.31s - 4231.19s | When this script runs, 4231.19s - 4233.69s | it essentially zeros the keys out on the card 4233.69s - 4235.51s | so that we can then pretend to be a reader 4235.51s - 4238.31s | with the Proxmark 3 there on the right-hand side. 4238.31s - 4240.35s | You can see here the success messages 4240.35s - 4241.39s | generated by the card, 4241.39s - 4243.87s | showing that the keys have been set to zeros, 4243.87s - 4247.19s | and then when we go and use that config card with a reader, 4247.19s - 4249.35s | in this case, our Proxmark 3, 4249.35s - 4251.55s | we'll tell it to generate those messages. 4253.15s - 4257.33s | Nope, it's not letting me scrub through it. 4257.33s - 4259.61s | Essentially, resulting in... 4259.61s - 4270.84s | Can you move it to the mic a little bit? 4270.84s - 4273.20s | Yay, tech problems, sorry, guys. 4273.20s - 4275.00s | A live demo might have


chunk_id: 206_chunk_90
chunk_text:
ahead. 4205.53s - 4206.37s | Oops, sorry. 4206.37s - 4220.57s | Oh, too far. 4220.57s - 4222.53s | I'm trying to zoom ahead. 4222.53s - 4228.35s | All right, go ahead. 4229.31s - 4231.19s | When this script runs, 4231.19s - 4233.69s | it essentially zeros the keys out on the card 4233.69s - 4235.51s | so that we can then pretend to be a reader 4235.51s - 4238.31s | with the Proxmark 3 there on the right-hand side. 4238.31s - 4240.35s | You can see here the success messages 4240.35s - 4241.39s | generated by the card, 4241.39s - 4243.87s | showing that the keys have been set to zeros, 4243.87s - 4247.19s | and then when we go and use that config card with a reader, 4247.19s - 4249.35s | in this case, our Proxmark 3, 4249.35s - 4251.55s | we'll tell it to generate those messages. 4253.15s - 4257.33s | Nope, it's not letting me scrub through it. 4257.33s - 4259.61s | Essentially, resulting in... 4259.61s - 4270.84s | Can you move it to the mic a little bit? 4270.84s - 4273.20s | Yay, tech problems, sorry, guys. 4273.20s - 4275.00s | A live demo might have been better. 4276.28s - 4277.70s | Anyway. 4277.70s - 4279.64s | So, this video will be uploaded. 4279.64s - 4280.80s | Yeah, it will be uploaded. 4280.80s - 4282.60s | We're uploading this version of the deck 4282.60s - 4283.48s | and the demo video, 4283.48s - 4286.28s | so you guys will be able to play it yourself as well. 4286.28s - 4287.68s | Essentially, we had a custom key 4287.68s - 4288.84s | encoded on that config card, 4288.84s - 4291.36s | and by zeroing the keys and retrieving that SNMP message, 4291.36s - 4293.80s | we were able to decrypt it and retrieve that secret key. 4293.80s - 4295.28s | That same process works for any keys 4295.28s - 4297.12s | stored on an encoder, SAM, 4297.12s - 4300.28s | or secure element of any kind in this platform. 4300.28s - 4303.08s | So, the config card impact of this is that 4303.08s - 4304.68s | if you can establish a secure channel, 4304.68s - 4306.52s | you can change keys and recover any sort of data 4306.52s - 4308.60s | that's on these cards, and that's kind of... 4308.60s - 4310.00s | The teal deer is,


chunk_id: 206_chunk_91
chunk_text:
been better. 4276.28s - 4277.70s | Anyway. 4277.70s - 4279.64s | So, this video will be uploaded. 4279.64s - 4280.80s | Yeah, it will be uploaded. 4280.80s - 4282.60s | We're uploading this version of the deck 4282.60s - 4283.48s | and the demo video, 4283.48s - 4286.28s | so you guys will be able to play it yourself as well. 4286.28s - 4287.68s | Essentially, we had a custom key 4287.68s - 4288.84s | encoded on that config card, 4288.84s - 4291.36s | and by zeroing the keys and retrieving that SNMP message, 4291.36s - 4293.80s | we were able to decrypt it and retrieve that secret key. 4293.80s - 4295.28s | That same process works for any keys 4295.28s - 4297.12s | stored on an encoder, SAM, 4297.12s - 4300.28s | or secure element of any kind in this platform. 4300.28s - 4303.08s | So, the config card impact of this is that 4303.08s - 4304.68s | if you can establish a secure channel, 4304.68s - 4306.52s | you can change keys and recover any sort of data 4306.52s - 4308.60s | that's on these cards, and that's kind of... 4308.60s - 4310.00s | The teal deer is, you know, 4310.00s - 4313.16s | Nick found a bug where you can zero out keys on a card 4313.16s - 4315.56s | and then dump messages from it, 4315.56s - 4317.54s | and if that card contained keys, 4317.54s - 4318.56s | you were able to then recover it. 4318.56s - 4319.40s | Exactly. 4319.40s - 4322.08s | So, all of that is gonna be in the video. 4322.08s - 4324.52s | Those of you who are into this can inspect it more. 4324.52s - 4326.48s | That'll be on the media server. 4326.48s - 4329.12s | And then the other thing that, sadly, I apologize 4329.12s - 4331.88s | that we're going a little bit slow earlier in the talk, 4331.88s - 4333.68s | the main thing is the encoder attack. 4333.68s - 4336.64s | Now, the encoder attack is a little bit more devastating, 4336.64s - 4340.44s | and for that reason, we are releasing in video form 4340.44s - 4343.28s | all of the details of how the config card works. 4343.28s - 4344.70s | We're describing what happens here. 4344.70s - 4346.72s | We're not releasing any code for it 4346.72s - 4349.28s | because


chunk_id: 206_chunk_92
chunk_text:
you know, 4310.00s - 4313.16s | Nick found a bug where you can zero out keys on a card 4313.16s - 4315.56s | and then dump messages from it, 4315.56s - 4317.54s | and if that card contained keys, 4317.54s - 4318.56s | you were able to then recover it. 4318.56s - 4319.40s | Exactly. 4319.40s - 4322.08s | So, all of that is gonna be in the video. 4322.08s - 4324.52s | Those of you who are into this can inspect it more. 4324.52s - 4326.48s | That'll be on the media server. 4326.48s - 4329.12s | And then the other thing that, sadly, I apologize 4329.12s - 4331.88s | that we're going a little bit slow earlier in the talk, 4331.88s - 4333.68s | the main thing is the encoder attack. 4333.68s - 4336.64s | Now, the encoder attack is a little bit more devastating, 4336.64s - 4340.44s | and for that reason, we are releasing in video form 4340.44s - 4343.28s | all of the details of how the config card works. 4343.28s - 4344.70s | We're describing what happens here. 4344.70s - 4346.72s | We're not releasing any code for it 4346.72s - 4349.28s | because after our investigation, 4349.28s - 4351.88s | the impact was gonna be significant, 4351.88s - 4357.84s | but we are gonna explain how it worked, basically. 4357.84s - 4361.08s | So, you wanna touch on this? 4361.08s - 4361.92s | Sure. 4361.92s - 4362.76s | Go ahead. 4362.76s - 4365.80s | So, the way that the encoder attack really works 4366.68s - 4369.36s | is that as part of encoding a config card 4369.36s - 4370.64s | and loading key material into it, 4370.64s - 4372.34s | you need to have a secure channel. 4373.52s - 4376.96s | But essentially, what we found is that 4376.96s - 4378.92s | the client is overly trusted here. 4378.92s - 4381.64s | So, if you look, if we cut out all the steps 4381.64s - 4384.24s | that involve initializing a secure channel, et cetera, 4385.08s - 4387.56s | we can just transmit the key in the clear. 4387.56s - 4389.84s | Yeah, so normally, what happens, 4389.84s - 4391.56s | and while this video is playing, 4392.80s - 4395.36s | during any key loading operation, 4395.36s - 4399.68s | that encoder creates a secure session with the card 4399.68s - 4401.14s |


chunk_id: 206_chunk_93
chunk_text:
after our investigation, 4349.28s - 4351.88s | the impact was gonna be significant, 4351.88s - 4357.84s | but we are gonna explain how it worked, basically. 4357.84s - 4361.08s | So, you wanna touch on this? 4361.08s - 4361.92s | Sure. 4361.92s - 4362.76s | Go ahead. 4362.76s - 4365.80s | So, the way that the encoder attack really works 4366.68s - 4369.36s | is that as part of encoding a config card 4369.36s - 4370.64s | and loading key material into it, 4370.64s - 4372.34s | you need to have a secure channel. 4373.52s - 4376.96s | But essentially, what we found is that 4376.96s - 4378.92s | the client is overly trusted here. 4378.92s - 4381.64s | So, if you look, if we cut out all the steps 4381.64s - 4384.24s | that involve initializing a secure channel, et cetera, 4385.08s - 4387.56s | we can just transmit the key in the clear. 4387.56s - 4389.84s | Yeah, so normally, what happens, 4389.84s - 4391.56s | and while this video is playing, 4392.80s - 4395.36s | during any key loading operation, 4395.36s - 4399.68s | that encoder creates a secure session with the card 4399.68s - 4401.14s | to create an encrypted channel, 4401.14s - 4403.00s | and then it transfers the key. 4403.00s - 4405.44s | And so, you have this whole end-to-end piece 4405.44s - 4408.08s | that is like a closed tunnel. 4408.08s - 4411.50s | What we found is that we could actually trick the encoder 4411.50s - 4414.56s | into saying, don't worry about secure channel session, 4414.56s - 4416.26s | just do your thing. 4416.26s - 4418.14s | So, we were able to then instruct it, 4418.14s - 4420.14s | yeah, ignore secure channel, 4420.14s - 4421.50s | just load the keys to the card. 4421.50s - 4422.66s | You're good, you're good. 4422.66s - 4424.00s | It's cool. 4424.00s - 4425.98s | And then we used Approxmark 3 4425.98s - 4428.42s | to intercept those keys in the clear, 4428.42s - 4430.46s | because we told it to ignore secure channel, 4430.46s - 4431.68s | and using that method, 4431.68s - 4435.04s | we were then able to iterate through keys 4435.04s - 4436.42s | that were built into the encoder 4436.42s - 4437.86s | and actually then recover them, 4437.86s - 4441.22s | because we were able to find a


chunk_id: 206_chunk_94
chunk_text:
to create an encrypted channel, 4401.14s - 4403.00s | and then it transfers the key. 4403.00s - 4405.44s | And so, you have this whole end-to-end piece 4405.44s - 4408.08s | that is like a closed tunnel. 4408.08s - 4411.50s | What we found is that we could actually trick the encoder 4411.50s - 4414.56s | into saying, don't worry about secure channel session, 4414.56s - 4416.26s | just do your thing. 4416.26s - 4418.14s | So, we were able to then instruct it, 4418.14s - 4420.14s | yeah, ignore secure channel, 4420.14s - 4421.50s | just load the keys to the card. 4421.50s - 4422.66s | You're good, you're good. 4422.66s - 4424.00s | It's cool. 4424.00s - 4425.98s | And then we used Approxmark 3 4425.98s - 4428.42s | to intercept those keys in the clear, 4428.42s - 4430.46s | because we told it to ignore secure channel, 4430.46s - 4431.68s | and using that method, 4431.68s - 4435.04s | we were then able to iterate through keys 4435.04s - 4436.42s | that were built into the encoder 4436.42s - 4437.86s | and actually then recover them, 4437.86s - 4441.22s | because we were able to find a defect 4441.94s - 4444.16s | in this very critical piece of implementation, 4444.16s - 4447.06s | and that all this work, 4447.06s - 4449.00s | simple, simple mistakes can be made. 4451.02s - 4455.50s | With apologies, we're unfortunately out of time. 4455.50s - 4460.50s | We are going to share these slides and the videos. 4460.50s - 4462.10s | The impacts that I just, 4462.10s - 4464.82s | if I could have an extra 60 seconds, if that's okay, 4464.82s - 4466.28s | I appreciate that. 4467.98s - 4470.06s | These types of mistakes are easy to make 4470.06s - 4472.64s | from an engineering perspective, okay? 4472.64s - 4475.22s | And even though this was one of the most well-designed 4475.22s - 4477.06s | systems that we've seen to date, 4477.06s - 4479.44s | with enough persistence, we found problems. 4480.34s - 4485.34s | And ultimately, this was a vulnerability that came about 4485.74s - 4488.52s | due to a lot of internal and external pressures 4488.52s - 4491.38s | from customers, from marketing, from sales, 4491.38s - 4493.02s | all sorts of different things, 4493.02s - 4494.74s | and really it boils down to an industry 4494.74s


chunk_id: 206_chunk_95
chunk_text:
defect 4441.94s - 4444.16s | in this very critical piece of implementation, 4444.16s - 4447.06s | and that all this work, 4447.06s - 4449.00s | simple, simple mistakes can be made. 4451.02s - 4455.50s | With apologies, we're unfortunately out of time. 4455.50s - 4460.50s | We are going to share these slides and the videos. 4460.50s - 4462.10s | The impacts that I just, 4462.10s - 4464.82s | if I could have an extra 60 seconds, if that's okay, 4464.82s - 4466.28s | I appreciate that. 4467.98s - 4470.06s | These types of mistakes are easy to make 4470.06s - 4472.64s | from an engineering perspective, okay? 4472.64s - 4475.22s | And even though this was one of the most well-designed 4475.22s - 4477.06s | systems that we've seen to date, 4477.06s - 4479.44s | with enough persistence, we found problems. 4480.34s - 4485.34s | And ultimately, this was a vulnerability that came about 4485.74s - 4488.52s | due to a lot of internal and external pressures 4488.52s - 4491.38s | from customers, from marketing, from sales, 4491.38s - 4493.02s | all sorts of different things, 4493.02s - 4494.74s | and really it boils down to an industry 4494.74s - 4496.70s | still being hooked on WeGant 4496.70s - 4498.82s | and looking for that interoperability. 4498.82s - 4501.34s | And the main message that we're trying to drive home 4501.34s - 4504.42s | is that no vendor is safe, technically. 4504.42s - 4508.14s | This was one of the most secure systems on the market, 4508.14s - 4510.28s | and we're still able to find problems. 4510.28s - 4513.98s | And really the issue is we're trying to put patches 4513.98s - 4515.44s | on something that really isn't designed 4515.44s - 4518.18s | to be that secure in the first place, which was WeGant. 4518.18s - 4520.22s | But if you do your risk mitigation properly, 4520.22s - 4522.42s | if you're building your security like an onion, 4522.42s - 4524.66s | it's not that big of a deal. 4524.66s - 4527.06s | So the last thing that we want to leave you with, 4527.06s - 4528.36s | depending on your threat model, 4528.88s - 4530.04s | and again, these will be in the slides, 4530.04s - 4532.88s | sincere apologies that we went a little bit slower 4532.88s - 4534.54s | than we originally had wanted


chunk_id: 206_chunk_96
chunk_text:
- 4496.70s | still being hooked on WeGant 4496.70s - 4498.82s | and looking for that interoperability. 4498.82s - 4501.34s | And the main message that we're trying to drive home 4501.34s - 4504.42s | is that no vendor is safe, technically. 4504.42s - 4508.14s | This was one of the most secure systems on the market, 4508.14s - 4510.28s | and we're still able to find problems. 4510.28s - 4513.98s | And really the issue is we're trying to put patches 4513.98s - 4515.44s | on something that really isn't designed 4515.44s - 4518.18s | to be that secure in the first place, which was WeGant. 4518.18s - 4520.22s | But if you do your risk mitigation properly, 4520.22s - 4522.42s | if you're building your security like an onion, 4522.42s - 4524.66s | it's not that big of a deal. 4524.66s - 4527.06s | So the last thing that we want to leave you with, 4527.06s - 4528.36s | depending on your threat model, 4528.88s - 4530.04s | and again, these will be in the slides, 4530.04s - 4532.88s | sincere apologies that we went a little bit slower 4532.88s - 4534.54s | than we originally had wanted to, 4534.54s - 4535.96s | depending on your threat actor, 4535.96s - 4538.02s | that's gonna define whether or not 4538.02s - 4540.80s | you have to do anything about this in any serious way. 4540.80s - 4543.00s | If you're just an average user 4543.00s - 4544.84s | and you're using standard keys, 4544.84s - 4547.08s | we do recommend that you move to a custom key 4547.08s - 4549.50s | like EliteKeys, and they're actually waiving the fees 4549.50s - 4552.26s | for this program for the first year as a result. 4552.26s - 4556.64s | If you're already using EliteKeys, you're probably fine, 4556.64s - 4559.32s | even though technically there may be advanced ways 4559.32s - 4560.90s | of recovering those out of a reader, 4560.90s - 4562.52s | it still takes a lot of skill 4562.52s - 4564.72s | and not a lot of people know how to do that. 4565.64s - 4570.64s | But if you're an advanced threat person or customer, 4571.00s - 4574.20s | then you really want to upgrade your hardware 4574.20s - 4576.72s | to the latest version, make sure you're using custom keys 4576.72s - 4580.64s | and engage


chunk_id: 206_chunk_97
chunk_text:
to, 4534.54s - 4535.96s | depending on your threat actor, 4535.96s - 4538.02s | that's gonna define whether or not 4538.02s - 4540.80s | you have to do anything about this in any serious way. 4540.80s - 4543.00s | If you're just an average user 4543.00s - 4544.84s | and you're using standard keys, 4544.84s - 4547.08s | we do recommend that you move to a custom key 4547.08s - 4549.50s | like EliteKeys, and they're actually waiving the fees 4549.50s - 4552.26s | for this program for the first year as a result. 4552.26s - 4556.64s | If you're already using EliteKeys, you're probably fine, 4556.64s - 4559.32s | even though technically there may be advanced ways 4559.32s - 4560.90s | of recovering those out of a reader, 4560.90s - 4562.52s | it still takes a lot of skill 4562.52s - 4564.72s | and not a lot of people know how to do that. 4565.64s - 4570.64s | But if you're an advanced threat person or customer, 4571.00s - 4574.20s | then you really want to upgrade your hardware 4574.20s - 4576.72s | to the latest version, make sure you're using custom keys 4576.72s - 4580.64s | and engage your vendor, engage your integrator and HID 4580.64s - 4582.04s | and talking about your risks 4582.04s - 4583.56s | and what you're trying to mitigate against 4583.56s - 4586.32s | so you have a practical real world understanding 4587.00s - 4589.40s | of what your system will do, what it will not do. 4590.28s - 4591.88s | And that's really the size of it. 4591.88s - 4593.68s | Again, thank you for being here. 4593.68s - 4595.04s | Thanks for your patience. 4595.04s - 4597.08s | Apologies, we didn't get through a couple slides, 4597.08s - 4598.84s | but that was really the meat of it. 4599.72s - 4602.68s | And thank you, thank you again, really appreciate it. 4602.68s - 4603.52s | Thank you. 4603.52s - 4604.34s | Thank you. 4604.34s - 4605.18s | Thank you. 4605.18s - 4606.02s | Thank you.


chunk_id: 206_chunk_98
chunk_text:
your vendor, engage your integrator and HID 4580.64s - 4582.04s | and talking about your risks 4582.04s - 4583.56s | and what you're trying to mitigate against 4583.56s - 4586.32s | so you have a practical real world understanding 4587.00s - 4589.40s | of what your system will do, what it will not do. 4590.28s - 4591.88s | And that's really the size of it. 4591.88s - 4593.68s | Again, thank you for being here. 4593.68s - 4595.04s | Thanks for your patience. 4595.04s - 4597.08s | Apologies, we didn't get through a couple slides, 4597.08s - 4598.84s | but that was really the meat of it. 4599.72s - 4602.68s | And thank you, thank you again, really appreciate it. 4602.68s - 4603.52s | Thank you. 4603.52s - 4604.34s | Thank you. 4604.34s - 4605.18s | Thank you. 4605.18s - 4606.02s | Thank you.


chunk_id: 207_chunk_0
chunk_text:
{ "webpage_url": "https://www.youtube.com/watch?v=11Yv2Ru7gF8", "title": "DEF CON 32 - Iconv, set the charset to RCE exploiting glibc to hack the PHP engine - Charles Fox", "description": "Upon its discovery, CVE-2024-2961, a very old buffer overflow in the glibc, seemed like a terrible bug. Within the prism of the PHP engine, however, the vulnerability shone, and provided both a new remote code execution vector and a few 0-days.\n\nThis talk will first walk you through the discovery of the bug and its limitations, before describing the conception of remote binary PHP exploits using this bug, and through them offer unique insight in the internal of the engine of the web language, and the difficulties one faces when exploiting it.\n\nAfter this, it will reveal the impact on PHP's ecosystem, from well-known functions to unsuspected sinks, by showcasing the vulnerability on several popular libraries and applications.", "channel_url": "https://www.youtube.com/channel/UC6Om9kAkl32dWlDSNlDS9Iw", "duration": 2580, "channel": "DEFCONConference", "uploader": "DEFCONConference", "upload_date": "20241016" } 0.53s - 2.53s | This text was transcribed using whisper model: large-v2 Hi 3.93s - 5.93s | Yeah, thank you 7.97s - 11.33s | Well, thank you for coming to my talk because I know it's the last talk for today 11.33s - 16.31s | So I guess everybody's pretty tired of seeing talks, but hopefully it will be interesting 16.73s - 21.73s | So the bug is a bug that I found by auditing PHP, but it's not on PHP 21.73s - 28.97s | It's a bug in the gdpc and it targets icons, which is the character set conversion library of the gdpc 29.21s - 34.81s | And I actually was able to use the bug to compromise the PHP engine in two different ways 35.25s - 38.37s | Remotely and this is this is what I'm going to talk about today 39.89s - 41.01s | So 41.01s - 45.61s | First I will describe how I found the bug it was by complete accident by complete chance 45.85s - 51.53s | But the way I will explain it to you will serve as an introduction to the next section 51.53s - 54.53s | Which is gonna which is gonna be about attacking PHP filters 54.53s - 57.13s | If you don't know what the PHP filter is, don't worry 57.13s - 61.73s | I will explain what this is and also afterwards I will attack a different way 61.73s - 65.69s | I will attack


chunk_id: 207_chunk_1
chunk_text:
everybody's pretty tired of seeing talks, but hopefully it will be interesting 16.73s - 21.73s | So the bug is a bug that I found by auditing PHP, but it's not on PHP 21.73s - 28.97s | It's a bug in the gdpc and it targets icons, which is the character set conversion library of the gdpc 29.21s - 34.81s | And I actually was able to use the bug to compromise the PHP engine in two different ways 35.25s - 38.37s | Remotely and this is this is what I'm going to talk about today 39.89s - 41.01s | So 41.01s - 45.61s | First I will describe how I found the bug it was by complete accident by complete chance 45.85s - 51.53s | But the way I will explain it to you will serve as an introduction to the next section 51.53s - 54.53s | Which is gonna which is gonna be about attacking PHP filters 54.53s - 57.13s | If you don't know what the PHP filter is, don't worry 57.13s - 61.73s | I will explain what this is and also afterwards I will attack a different way 61.73s - 65.69s | I will attack PHP by targeting direct calls to icons and 66.65s - 71.69s | Well after this, hopefully we'll have time for a conclusion and maybe a little bit of a bonus 72.93s - 74.29s | so 74.29s - 77.77s | Regarding the discovery. Well to understand how I found the bug 77.89s - 82.09s | We need to understand what you can do when you have a favorite primitive in PHP 82.09s - 85.69s | So code such as this one, but it could also be a fellow 86.53s - 92.57s | An F open followed by an F reads like any foundry primitive in PHP. What can you do with it? 92.89s - 96.09s | Well, obviously you can read a file you can really TC password 96.73s - 101.09s | but you can also force PHP into reading HTTP resource that would work and 102.01s - 104.13s | FTP resource that would work as well and 104.93s - 107.09s | there are also other protocols that 107.81s - 112.17s | You can use which are PHP specific such as far colon slash slash 112.73s - 114.73s | it will let you read the 116.29s - 122.17s | Contents of


chunk_id: 207_chunk_2
chunk_text:
PHP by targeting direct calls to icons and 66.65s - 71.69s | Well after this, hopefully we'll have time for a conclusion and maybe a little bit of a bonus 72.93s - 74.29s | so 74.29s - 77.77s | Regarding the discovery. Well to understand how I found the bug 77.89s - 82.09s | We need to understand what you can do when you have a favorite primitive in PHP 82.09s - 85.69s | So code such as this one, but it could also be a fellow 86.53s - 92.57s | An F open followed by an F reads like any foundry primitive in PHP. What can you do with it? 92.89s - 96.09s | Well, obviously you can read a file you can really TC password 96.73s - 101.09s | but you can also force PHP into reading HTTP resource that would work and 102.01s - 104.13s | FTP resource that would work as well and 104.93s - 107.09s | there are also other protocols that 107.81s - 112.17s | You can use which are PHP specific such as far colon slash slash 112.73s - 114.73s | it will let you read the 116.29s - 122.17s | Contents of archive. So for those who don't know for archive, it's like a jar for Java 122.17s - 126.33s | So it's a collection of source files resources and also in PHP 126.33s - 134.05s | It contains serialized metadata and when you access such a file using far colon slash slash the metadata will be deserialized 134.37s - 135.45s | so 135.45s - 140.61s | There was an attack for the longest time that was that you could upload a file to a server 141.37s - 148.25s | Any file an image or anything and then you would use your file with primitive to load it as a far and that would give you 148.45s - 151.65s | Arbitrary deserialization which oftentimes meant RCE 153.33s - 157.33s | Sadly in PHP 8 they have disabled the deserialization of the metadata 158.13s - 166.01s | Because they actually don't use the metadata. So it was completely useless and also in older versions big frameworks have been removing 166.61s - 171.13s | The far colon slash slash protocol because they don't use it and they also know that 171.69s - 178.19s | It is very dangerous like magento got completely demolished with


chunk_id: 207_chunk_3
chunk_text:
archive. So for those who don't know for archive, it's like a jar for Java 122.17s - 126.33s | So it's a collection of source files resources and also in PHP 126.33s - 134.05s | It contains serialized metadata and when you access such a file using far colon slash slash the metadata will be deserialized 134.37s - 135.45s | so 135.45s - 140.61s | There was an attack for the longest time that was that you could upload a file to a server 141.37s - 148.25s | Any file an image or anything and then you would use your file with primitive to load it as a far and that would give you 148.45s - 151.65s | Arbitrary deserialization which oftentimes meant RCE 153.33s - 157.33s | Sadly in PHP 8 they have disabled the deserialization of the metadata 158.13s - 166.01s | Because they actually don't use the metadata. So it was completely useless and also in older versions big frameworks have been removing 166.61s - 171.13s | The far colon slash slash protocol because they don't use it and they also know that 171.69s - 178.19s | It is very dangerous like magento got completely demolished with this with the the far colon slash like bug 178.49s - 180.49s | There there was like hundreds of bugs 181.25s - 185.05s | reported to them using far colon slash slash so they just removed it entirely and 185.81s - 190.25s | also, it's going to be harder to exploit even not on PHP 8 this bug because 191.13s - 194.49s | Deserialization is going to get harder and harder to exploit as time goes by because 194.97s - 199.53s | Mainly because actually types are making a comeback, but that's probably subject for another talk 201.41s - 206.13s | So people have taken the interest into another PHP specific protocol, which is called PHP 206.93s - 212.05s | Well, you can guess it's PHP specific and there's a sub part of this which is called PHP filter 212.05s - 218.15s | And what it does is that it will read a resource and apply some filters that you have chosen onto it 219.07s - 224.63s | It will then return the resource as if it was the original file, but we felt us apply onto it 224.63s - 228.79s | So a good example of this and probably


chunk_id: 207_chunk_4
chunk_text:
this with the the far colon slash like bug 178.49s - 180.49s | There there was like hundreds of bugs 181.25s - 185.05s | reported to them using far colon slash slash so they just removed it entirely and 185.81s - 190.25s | also, it's going to be harder to exploit even not on PHP 8 this bug because 191.13s - 194.49s | Deserialization is going to get harder and harder to exploit as time goes by because 194.97s - 199.53s | Mainly because actually types are making a comeback, but that's probably subject for another talk 201.41s - 206.13s | So people have taken the interest into another PHP specific protocol, which is called PHP 206.93s - 212.05s | Well, you can guess it's PHP specific and there's a sub part of this which is called PHP filter 212.05s - 218.15s | And what it does is that it will read a resource and apply some filters that you have chosen onto it 219.07s - 224.63s | It will then return the resource as if it was the original file, but we felt us apply onto it 224.63s - 228.79s | So a good example of this and probably the simplest one that you can get is this string 228.79s - 232.79s | So you have PHP filter then one filter which is convert the base 64 encodes 232.79s - 237.55s | You can probably guess what it does converse to base 64 and then the resource is it is a password 238.19s - 242.53s | So what you get when you do a file get contents of this is file get 243.13s - 244.65s | Is it is password sorry 244.65s - 250.05s | But basics if one code it and the good thing about these filters is that you can stack as many as you want 250.05s - 256.73s | So instead of basic c4 encoding once I can do it twice, but I could also do it like a thousand times. It will work 258.85s - 261.57s | Well, obviously you can do other things than basic c4 encodes 261.73s - 263.73s | you might be able to 263.85s - 270.69s | Put your string in uppercase with string dot upper or put it in lowercase with string dot lower and do some very very old 270.73s - 275.01s | Crypto we've wrought 13. I don't


chunk_id: 207_chunk_5
chunk_text:
the simplest one that you can get is this string 228.79s - 232.79s | So you have PHP filter then one filter which is convert the base 64 encodes 232.79s - 237.55s | You can probably guess what it does converse to base 64 and then the resource is it is a password 238.19s - 242.53s | So what you get when you do a file get contents of this is file get 243.13s - 244.65s | Is it is password sorry 244.65s - 250.05s | But basics if one code it and the good thing about these filters is that you can stack as many as you want 250.05s - 256.73s | So instead of basic c4 encoding once I can do it twice, but I could also do it like a thousand times. It will work 258.85s - 261.57s | Well, obviously you can do other things than basic c4 encodes 261.73s - 263.73s | you might be able to 263.85s - 270.69s | Put your string in uppercase with string dot upper or put it in lowercase with string dot lower and do some very very old 270.73s - 275.01s | Crypto we've wrought 13. I don't know why it's there, but it actually works and 275.77s - 281.73s | You can also use filters that are not documented, but very useful as an attacker such as D chunk 281.73s - 283.73s | I will talk about it later and 284.05s - 286.41s | Well, you can also use the star for today 286.41s - 292.81s | Which is convert that icons that X dot Y and what it will do is that it will use the icon of library of the gdpc 292.81s - 298.29s | To convert your stream from charset X to charset Y just to give you a quick example 298.61s - 301.69s | Say that you have etc password you want to convert it from 302.29s - 305.41s | UTF-8 to UTF-16 you can use this string 305.81s - 311.53s | This PHP filter string and it will do it automatically as you can see in the X dump right underneath 313.81s - 315.05s | So 315.05s - 318.21s | Well these filters they've been like attacked a lot 318.45s - 322.65s | There's been a lot of research on to them and the consensus in 323.17s - 329.93s | 2023 was


chunk_id: 207_chunk_6
chunk_text:
know why it's there, but it actually works and 275.77s - 281.73s | You can also use filters that are not documented, but very useful as an attacker such as D chunk 281.73s - 283.73s | I will talk about it later and 284.05s - 286.41s | Well, you can also use the star for today 286.41s - 292.81s | Which is convert that icons that X dot Y and what it will do is that it will use the icon of library of the gdpc 292.81s - 298.29s | To convert your stream from charset X to charset Y just to give you a quick example 298.61s - 301.69s | Say that you have etc password you want to convert it from 302.29s - 305.41s | UTF-8 to UTF-16 you can use this string 305.81s - 311.53s | This PHP filter string and it will do it automatically as you can see in the X dump right underneath 313.81s - 315.05s | So 315.05s - 318.21s | Well these filters they've been like attacked a lot 318.45s - 322.65s | There's been a lot of research on to them and the consensus in 323.17s - 329.93s | 2023 was that you could add using filters an arbitrary prefix to any file so you could dump etc password 329.93s - 334.97s | but with an arbitrary prefix just by picking the right filters to apply on to it and 336.29s - 340.41s | Myself what I wanted to see was whether or not I could get an arbitrary suffix as well 340.97s - 345.33s | So an arbitrary prefix on some text and then some suffix as well 345.33s - 350.41s | And the idea is very simple say that you have this piece of code of course you have a favorite primitive 350.41s - 354.55s | But then right afterwards you have a JSON decode, so if the file is not valid JSON 355.05s - 358.05s | Your favorite primitive is useless like you cannot read etc password 358.17s - 365.61s | But if you can make your file look like JSON using an arbitrary prefix and suffix you can make the JSON decode works 366.09s - 372.77s | work sorry and therefore you can well make PHP think it's JSON and return to you the contents of etc passwords and 372.93s - 379.85s | This research it actually


chunk_id: 207_chunk_7
chunk_text:
that you could add using filters an arbitrary prefix to any file so you could dump etc password 329.93s - 334.97s | but with an arbitrary prefix just by picking the right filters to apply on to it and 336.29s - 340.41s | Myself what I wanted to see was whether or not I could get an arbitrary suffix as well 340.97s - 345.33s | So an arbitrary prefix on some text and then some suffix as well 345.33s - 350.41s | And the idea is very simple say that you have this piece of code of course you have a favorite primitive 350.41s - 354.55s | But then right afterwards you have a JSON decode, so if the file is not valid JSON 355.05s - 358.05s | Your favorite primitive is useless like you cannot read etc password 358.17s - 365.61s | But if you can make your file look like JSON using an arbitrary prefix and suffix you can make the JSON decode works 366.09s - 372.77s | work sorry and therefore you can well make PHP think it's JSON and return to you the contents of etc passwords and 372.93s - 379.85s | This research it actually works. It has a few preconditions, but you can actually pull it off and I called the tool 379.85s - 384.77s | Vraap Vraap and I have made a blog post about it. It's on our company's blog 384.77s - 387.61s | so I'm bernie nix.io as you can see on the bottom and 388.73s - 392.65s | Well the important part in all this is that at the beginning 392.65s - 396.29s | I didn't know much when I started this research about PHP filters 396.37s - 400.57s | So I built a few scripts just to try and do some conversion 400.57s - 405.21s | So maybe from charset A to B then apply a basic C4D code then from C to D 405.37s - 409.45s | Like lots of conversions just to see what I could get as a result 409.45s - 413.25s | and I actually got a crash while doing this so I was pretty surprised and 414.05s - 419.13s | I've been working with PHP for like 20 years, so I kind of felt like it was due to PHP 419.13s - 424.65s | You know because it's always PHP, but this time it


chunk_id: 207_chunk_8
chunk_text:
works. It has a few preconditions, but you can actually pull it off and I called the tool 379.85s - 384.77s | Vraap Vraap and I have made a blog post about it. It's on our company's blog 384.77s - 387.61s | so I'm bernie nix.io as you can see on the bottom and 388.73s - 392.65s | Well the important part in all this is that at the beginning 392.65s - 396.29s | I didn't know much when I started this research about PHP filters 396.37s - 400.57s | So I built a few scripts just to try and do some conversion 400.57s - 405.21s | So maybe from charset A to B then apply a basic C4D code then from C to D 405.37s - 409.45s | Like lots of conversions just to see what I could get as a result 409.45s - 413.25s | and I actually got a crash while doing this so I was pretty surprised and 414.05s - 419.13s | I've been working with PHP for like 20 years, so I kind of felt like it was due to PHP 419.13s - 424.65s | You know because it's always PHP, but this time it wasn't PHP. It was actually due to the glibc 424.65s - 427.95s | So the base library for most Linux programs 428.29s - 435.09s | because when PHP does the character set conversion using convert the type of it will use the icon library of the glibc and 435.45s - 439.89s | What this library does is that you pick an input charset and an output charset 439.89s - 445.97s | And then you feed it buffers, and it will convert from your input buffer to the output buffer from one charset to another 447.33s - 453.73s | the thing is when you call the icon function you give it an input buffer with some size and an output buffer with some other 453.73s - 455.37s | size and 455.37s - 460.61s | Obviously it should guarantee that it will now read more bytes in the input buffer than it should or more 460.73s - 466.77s | Write more bytes than it should in the output buffer and generally does so pretty well like there's no overflow 467.09s - 472.85s | But sometimes it fails to do so and this is exactly why I got my crash. It is 473.37s


chunk_id: 207_chunk_9
chunk_text:
wasn't PHP. It was actually due to the glibc 424.65s - 427.95s | So the base library for most Linux programs 428.29s - 435.09s | because when PHP does the character set conversion using convert the type of it will use the icon library of the glibc and 435.45s - 439.89s | What this library does is that you pick an input charset and an output charset 439.89s - 445.97s | And then you feed it buffers, and it will convert from your input buffer to the output buffer from one charset to another 447.33s - 453.73s | the thing is when you call the icon function you give it an input buffer with some size and an output buffer with some other 453.73s - 455.37s | size and 455.37s - 460.61s | Obviously it should guarantee that it will now read more bytes in the input buffer than it should or more 460.73s - 466.77s | Write more bytes than it should in the output buffer and generally does so pretty well like there's no overflow 467.09s - 472.85s | But sometimes it fails to do so and this is exactly why I got my crash. It is 473.37s - 477.41s | That's when you convert to some very obscure charset, which is called ISO 478.25s - 486.33s | 2022 CNX in some cases it will not check the bounds of the output buffer before writing some escape sequences and 486.77s - 489.25s | That means that as a result as an attacker 489.45s - 493.41s | You if you are able to convert some text to ISO 2022 CNX 493.41s - 498.73s | You will get an overflow of one to three bytes with the very specific values that I've written here 498.73s - 504.73s | So your overflow could be with dollar star H or dollar plus I or dollar plus J any of these six values 504.73s - 506.73s | But only these six values 507.97s - 511.77s | To give you a quick idea of the characters that you can use to trigger the bug 511.93s - 516.45s | Those are the characters that I trigger the bug with so those are Chinese characters 516.45s - 519.29s | I have no idea what they mean, but they give you a buffer overflow 521.61s - 527.25s | So the vulnerability that we have it's already pretty


chunk_id: 207_chunk_10
chunk_text:
- 477.41s | That's when you convert to some very obscure charset, which is called ISO 478.25s - 486.33s | 2022 CNX in some cases it will not check the bounds of the output buffer before writing some escape sequences and 486.77s - 489.25s | That means that as a result as an attacker 489.45s - 493.41s | You if you are able to convert some text to ISO 2022 CNX 493.41s - 498.73s | You will get an overflow of one to three bytes with the very specific values that I've written here 498.73s - 504.73s | So your overflow could be with dollar star H or dollar plus I or dollar plus J any of these six values 504.73s - 506.73s | But only these six values 507.97s - 511.77s | To give you a quick idea of the characters that you can use to trigger the bug 511.93s - 516.45s | Those are the characters that I trigger the bug with so those are Chinese characters 516.45s - 519.29s | I have no idea what they mean, but they give you a buffer overflow 521.61s - 527.25s | So the vulnerability that we have it's already pretty bad like it's a one to three bytes overflow 527.25s - 533.01s | And it's fixed by values that you don't control the bytes in addition to this you have horrible conditions 533.01s - 535.01s | Like you have to control the output charset 535.05s - 539.85s | You have to set it to ISO 2022 CNX like nobody heard about it in in the room 539.85s - 544.21s | I guess so yeah, you need to find an application that will let you pick your output charset 544.21s - 546.77s | Otherwise you will not find an application that does it willingly 547.33s - 553.05s | in addition to this you need to control part of the input buffer so that you can put in the Chinese characters and 553.89s - 560.13s | Again a third condition is that you need to have a suitable output buffer if the output buffer is too small 561.05s - 566.01s | Sorry too big compared to the input buffer even though you may have an overflow in theory 566.01s - 572.05s | You're not going to be able to reach the end of the bounds of the output buffer before you trigger


chunk_id: 207_chunk_11
chunk_text:
bad like it's a one to three bytes overflow 527.25s - 533.01s | And it's fixed by values that you don't control the bytes in addition to this you have horrible conditions 533.01s - 535.01s | Like you have to control the output charset 535.05s - 539.85s | You have to set it to ISO 2022 CNX like nobody heard about it in in the room 539.85s - 544.21s | I guess so yeah, you need to find an application that will let you pick your output charset 544.21s - 546.77s | Otherwise you will not find an application that does it willingly 547.33s - 553.05s | in addition to this you need to control part of the input buffer so that you can put in the Chinese characters and 553.89s - 560.13s | Again a third condition is that you need to have a suitable output buffer if the output buffer is too small 561.05s - 566.01s | Sorry too big compared to the input buffer even though you may have an overflow in theory 566.01s - 572.05s | You're not going to be able to reach the end of the bounds of the output buffer before you trigger your escape sequence 572.05s - 573.41s | And therefore you are not overflow 573.41s - 579.05s | and this is like what was the most annoying part in looking for targets for this bug because I 579.45s - 585.77s | Thought I had a bug in libxml2 because you can send an encoding using when you send your XML 585.89s - 592.49s | But the output buffer when you did the conversion was way too big and therefore I couldn't exploit and that's only one of many 592.65s - 597.69s | And so after probably weeks of looking for targets 597.69s - 603.77s | I got super frustrated and I went back to PHP filters because that's the only thing that I could make crash and 604.33s - 608.85s | That's actually the only thing that crashed without even me trying for it to crash. So I 609.61s - 614.69s | was like, okay, that's probably my best bet to exploit this bug and I focus on to it and 615.25s - 623.53s | The idea was to convert file read primitives in PHP any fabric primitive into remote code execution like straight up using this binary bug 624.53s -


chunk_id: 207_chunk_12
chunk_text:
your escape sequence 572.05s - 573.41s | And therefore you are not overflow 573.41s - 579.05s | and this is like what was the most annoying part in looking for targets for this bug because I 579.45s - 585.77s | Thought I had a bug in libxml2 because you can send an encoding using when you send your XML 585.89s - 592.49s | But the output buffer when you did the conversion was way too big and therefore I couldn't exploit and that's only one of many 592.65s - 597.69s | And so after probably weeks of looking for targets 597.69s - 603.77s | I got super frustrated and I went back to PHP filters because that's the only thing that I could make crash and 604.33s - 608.85s | That's actually the only thing that crashed without even me trying for it to crash. So I 609.61s - 614.69s | was like, okay, that's probably my best bet to exploit this bug and I focus on to it and 615.25s - 623.53s | The idea was to convert file read primitives in PHP any fabric primitive into remote code execution like straight up using this binary bug 624.53s - 627.73s | So to explain to you how we might be able to do this 627.77s - 631.81s | we need to think about how PHP does allocations and the allocations and 632.81s - 637.91s | For this we need to understand PHP's heap, but don't worry. That's probably simplest heap that you're ever gonna see 638.25s - 642.97s | So it's 500 500 sorry in 12 pages of OX a thousand bytes each 642.97s - 648.89s | So four thousand ninety six bytes and each page contain chunks of some size. So it might be a chunk 649.53s - 655.61s | Sorry in page 10, you may have chunks of size OX 100 in page 11. You may have chunks of size OX 30, etc 655.61s - 661.17s | Etc. And then when you free a chunk, it will go into the free list for this chunk size 661.33s - 666.17s | So if I free a chunk of size OX 100 it will go into the free list for size OX 100 666.17s - 671.73s | If I free a chunk of size OX 10, it will go into the free list for chunks of this size as


chunk_id: 207_chunk_13
chunk_text:
627.73s | So to explain to you how we might be able to do this 627.77s - 631.81s | we need to think about how PHP does allocations and the allocations and 632.81s - 637.91s | For this we need to understand PHP's heap, but don't worry. That's probably simplest heap that you're ever gonna see 638.25s - 642.97s | So it's 500 500 sorry in 12 pages of OX a thousand bytes each 642.97s - 648.89s | So four thousand ninety six bytes and each page contain chunks of some size. So it might be a chunk 649.53s - 655.61s | Sorry in page 10, you may have chunks of size OX 100 in page 11. You may have chunks of size OX 30, etc 655.61s - 661.17s | Etc. And then when you free a chunk, it will go into the free list for this chunk size 661.33s - 666.17s | So if I free a chunk of size OX 100 it will go into the free list for size OX 100 666.17s - 671.73s | If I free a chunk of size OX 10, it will go into the free list for chunks of this size as well 671.73s - 675.05s | And the free list are singly linked list. They are lasting 675.57s - 679.81s | First out so that means that if I free a chunk of some size and allocate a new one afterwards 679.81s - 686.25s | It will be allocated exactly at the same spot and it's very similar for those who don't would do PT malloc 687.25s - 692.83s | Exploitation to the leap city cage, but completely unlimited and without any protections 694.01s - 695.25s | so 695.25s - 699.81s | Just to give you an idea of what we can do with one to three bytes overflow in the PHP heap 699.85s - 703.21s | Let's have a look at this example. So on the left you have the heap 703.65s - 710.33s | Okay with five hundred and twelve pages and in page five in this example, I have chunks of size OX 400 710.45s - 712.61s | So in page five, I have four chunks 713.17s - 718.73s | In my example, I have chunk one that is allocated chunks free that is allocated checking two and four that are not 719.09s - 724.57s | So in


chunk_id: 207_chunk_14
chunk_text:
well 671.73s - 675.05s | And the free list are singly linked list. They are lasting 675.57s - 679.81s | First out so that means that if I free a chunk of some size and allocate a new one afterwards 679.81s - 686.25s | It will be allocated exactly at the same spot and it's very similar for those who don't would do PT malloc 687.25s - 692.83s | Exploitation to the leap city cage, but completely unlimited and without any protections 694.01s - 695.25s | so 695.25s - 699.81s | Just to give you an idea of what we can do with one to three bytes overflow in the PHP heap 699.85s - 703.21s | Let's have a look at this example. So on the left you have the heap 703.65s - 710.33s | Okay with five hundred and twelve pages and in page five in this example, I have chunks of size OX 400 710.45s - 712.61s | So in page five, I have four chunks 713.17s - 718.73s | In my example, I have chunk one that is allocated chunks free that is allocated checking two and four that are not 719.09s - 724.57s | So in chunk two and chunk four since they are in the free list for chunks of size OX 400 724.69s - 727.49s | That means that they contain a pointer to the next free chunk 727.89s - 732.73s | So if I was to overflow even with one byte from chunk one 732.73s - 737.89s | I would be able to at least partially modify the pointer that is control that is contained 737.89s - 743.85s | Sorry in chunk two and that would be a way to alter some free list pointer and in the end probably 744.53s - 747.37s | Be a good starting point for an exploitation 747.81s - 757.63s | So the PHP heap it looks very very easy to exploit right? There's no metadata. It's page based. There's absolutely no protections 757.63s - 762.87s | It's really easy to understand. So why is it that there are not that many remote binary exploits? 762.91s - 769.29s | Well to me the main problem is that the PHP has the one heap for one request policy 769.39s - 773.27s | So if you send an HTTP request PHP will create the heap 773.71s - 778.67s | Allocate


chunk_id: 207_chunk_15
chunk_text:
chunk two and chunk four since they are in the free list for chunks of size OX 400 724.69s - 727.49s | That means that they contain a pointer to the next free chunk 727.89s - 732.73s | So if I was to overflow even with one byte from chunk one 732.73s - 737.89s | I would be able to at least partially modify the pointer that is control that is contained 737.89s - 743.85s | Sorry in chunk two and that would be a way to alter some free list pointer and in the end probably 744.53s - 747.37s | Be a good starting point for an exploitation 747.81s - 757.63s | So the PHP heap it looks very very easy to exploit right? There's no metadata. It's page based. There's absolutely no protections 757.63s - 762.87s | It's really easy to understand. So why is it that there are not that many remote binary exploits? 762.91s - 769.29s | Well to me the main problem is that the PHP has the one heap for one request policy 769.39s - 773.27s | So if you send an HTTP request PHP will create the heap 773.71s - 778.67s | Allocate your HTTP parameters into it then run the script. So that means also compiling the script 778.67s - 782.99s | So you will do like thousands of allocations and the allocations and then it will completely destroy the heap 783.31s - 787.99s | So now imagine that you have a use-after-free on some VPN instance for instance 788.79s - 792.79s | What you would do to exploits would be to send a few requests to set up your heap 792.95s - 800.25s | Then one more request to like trigger your bug trigger your UAF and then afterwards send a few more requests to use your bug 800.63s - 805.67s | But here you cannot do this. You have to find a way to trigger bug remotely 805.67s - 809.77s | So you need a bug in the PHP engine you need an application that lets you trigger the bug remotely 809.81s - 815.13s | But also you need to use the bug as the request is running before the heap is gone 815.13s - 820.05s | And this is why it's hard because in between the triggering and the bug of the bug and the usage of the bug


chunk_id: 207_chunk_16
chunk_text:
your HTTP parameters into it then run the script. So that means also compiling the script 778.67s - 782.99s | So you will do like thousands of allocations and the allocations and then it will completely destroy the heap 783.31s - 787.99s | So now imagine that you have a use-after-free on some VPN instance for instance 788.79s - 792.79s | What you would do to exploits would be to send a few requests to set up your heap 792.95s - 800.25s | Then one more request to like trigger your bug trigger your UAF and then afterwards send a few more requests to use your bug 800.63s - 805.67s | But here you cannot do this. You have to find a way to trigger bug remotely 805.67s - 809.77s | So you need a bug in the PHP engine you need an application that lets you trigger the bug remotely 809.81s - 815.13s | But also you need to use the bug as the request is running before the heap is gone 815.13s - 820.05s | And this is why it's hard because in between the triggering and the bug of the bug and the usage of the bug 820.05s - 823.83s | You're not gonna have any way to interact with the HTTP request 823.83s - 827.89s | Like you've sent every HTTP parameter and it's done like it's a black box now 828.37s - 832.01s | And this is to me why it's really really hard to exploit on 832.85s - 839.60s | PHP remotely 839.60s - 841.72s | Okay. So in addition to this 841.72s - 847.32s | There's one thing that we need to understand is how PHP processes PHP filter strings and to do so 848.12s - 850.28s | You will have a two-step process 850.72s - 856.12s | Where you will first read the resource as a stream and then it will apply filters one by one onto the resource 856.96s - 862.44s | so fetching the stream it will use a very standard structure, which is called a bucket brigades and 863.80s - 867.80s | Each part of the stream is represented as one bucket of a few bytes 867.84s - 868.96s | So for instance 868.96s - 873.24s | If you really see password the first bucket may contain five bytes of it is password 873.24s - 878.16s | Then the


chunk_id: 207_chunk_17
chunk_text:
820.05s - 823.83s | You're not gonna have any way to interact with the HTTP request 823.83s - 827.89s | Like you've sent every HTTP parameter and it's done like it's a black box now 828.37s - 832.01s | And this is to me why it's really really hard to exploit on 832.85s - 839.60s | PHP remotely 839.60s - 841.72s | Okay. So in addition to this 841.72s - 847.32s | There's one thing that we need to understand is how PHP processes PHP filter strings and to do so 848.12s - 850.28s | You will have a two-step process 850.72s - 856.12s | Where you will first read the resource as a stream and then it will apply filters one by one onto the resource 856.96s - 862.44s | so fetching the stream it will use a very standard structure, which is called a bucket brigades and 863.80s - 867.80s | Each part of the stream is represented as one bucket of a few bytes 867.84s - 868.96s | So for instance 868.96s - 873.24s | If you really see password the first bucket may contain five bytes of it is password 873.24s - 878.16s | Then the second bucket will contain the next few bytes or for instance ten bytes and the buckets 878.16s - 881.32s | We will contain a few more bytes that come right after etc, etc, etc 881.76s - 888.44s | So that's a way to be able to represent any stream a list of buffers that are linked together and that may have different sizes 891.32s - 895.24s | Once you have your stream you can start applying filters onto them 895.24s - 899.40s | So you take the first filter and you take the first bucket and you apply the filter onto it 899.92s - 906.60s | So for instance if it's base 64 decodes PHP will take the first bucket and decode the data disease that is into it 906.80s - 912.88s | Then it will be able to process bucket 2 which it will do and then bucket 3 and at the end you get a new bucket 912.88s - 915.48s | Brigade on which the first filter has been applied 915.60s - 920.52s | So what you can do is start working on the second filter then on the third one, etc 920.80s - 926.56s | Up until


chunk_id: 207_chunk_18
chunk_text:
second bucket will contain the next few bytes or for instance ten bytes and the buckets 878.16s - 881.32s | We will contain a few more bytes that come right after etc, etc, etc 881.76s - 888.44s | So that's a way to be able to represent any stream a list of buffers that are linked together and that may have different sizes 891.32s - 895.24s | Once you have your stream you can start applying filters onto them 895.24s - 899.40s | So you take the first filter and you take the first bucket and you apply the filter onto it 899.92s - 906.60s | So for instance if it's base 64 decodes PHP will take the first bucket and decode the data disease that is into it 906.80s - 912.88s | Then it will be able to process bucket 2 which it will do and then bucket 3 and at the end you get a new bucket 912.88s - 915.48s | Brigade on which the first filter has been applied 915.60s - 920.52s | So what you can do is start working on the second filter then on the third one, etc 920.80s - 926.56s | Up until the end and now you have a stream that is being that has been completely processed with filters and 927.16s - 931.28s | Your PHP filter string has been completely perfectly and look and old 932.24s - 934.68s | So if we look back at everything now 934.68s - 939.52s | It looks pretty easy to exploit this fabric because we have a fabric primitive and we want to get our C 939.52s - 943.12s | But since we have a fabric primitive, well first we can read the binaries 943.12s - 948.12s | So if I want to have the address of some of some symbol for instance in the lipsy 948.12s - 953.08s | I just download the lipsy using the fabric primitive if I want to check if the lipsy is patched against the bug 953.08s - 955.56s | I can also download the lipsy and check the code myself, you know 955.56s - 960.00s | And so that means that you can find gadgets easily in addition to this 960.48s - 964.24s | ASLR and PI are not a problem because I can just read proxmaps. So 964.80s - 970.92s | Any address that I want


chunk_id: 207_chunk_19
chunk_text:
the end and now you have a stream that is being that has been completely processed with filters and 927.16s - 931.28s | Your PHP filter string has been completely perfectly and look and old 932.24s - 934.68s | So if we look back at everything now 934.68s - 939.52s | It looks pretty easy to exploit this fabric because we have a fabric primitive and we want to get our C 939.52s - 943.12s | But since we have a fabric primitive, well first we can read the binaries 943.12s - 948.12s | So if I want to have the address of some of some symbol for instance in the lipsy 948.12s - 953.08s | I just download the lipsy using the fabric primitive if I want to check if the lipsy is patched against the bug 953.08s - 955.56s | I can also download the lipsy and check the code myself, you know 955.56s - 960.00s | And so that means that you can find gadgets easily in addition to this 960.48s - 964.24s | ASLR and PI are not a problem because I can just read proxmaps. So 964.80s - 970.92s | Any address that I want is going to be probably in proxmaps. So ASLR and PI it's gone 971.44s - 977.28s | A corollary to this is that the address of PHP the PHP heap is really easy to find in the proxmaps 977.28s - 980.32s | So I have the address of the PHP which is going to be useful later 980.76s - 985.68s | In addition to this it kind of feels like they can do arbitrary allocations and the allocations 986.12s - 988.80s | Simply using the bucket brigade technology 988.80s - 990.68s | So the way that the stream is 990.68s - 994.48s | Represented if I can create as many buckets as I want with the sizes that I want 994.48s - 997.40s | I will probably be able to build an exploit that works 999.32s - 1005.20s | But on the other side I can I want to have an exploit that works well even in an unknown environment 1005.20s - 1009.00s | So I don't want to build a new exploit when I'm targeting a wordpress or some very specific 1009.24s - 1014.28s | Version of PHP or some magento with which has a lot of traffic on


chunk_id: 207_chunk_20
chunk_text:
is going to be probably in proxmaps. So ASLR and PI it's gone 971.44s - 977.28s | A corollary to this is that the address of PHP the PHP heap is really easy to find in the proxmaps 977.28s - 980.32s | So I have the address of the PHP which is going to be useful later 980.76s - 985.68s | In addition to this it kind of feels like they can do arbitrary allocations and the allocations 986.12s - 988.80s | Simply using the bucket brigade technology 988.80s - 990.68s | So the way that the stream is 990.68s - 994.48s | Represented if I can create as many buckets as I want with the sizes that I want 994.48s - 997.40s | I will probably be able to build an exploit that works 999.32s - 1005.20s | But on the other side I can I want to have an exploit that works well even in an unknown environment 1005.20s - 1009.00s | So I don't want to build a new exploit when I'm targeting a wordpress or some very specific 1009.24s - 1014.28s | Version of PHP or some magento with which has a lot of traffic on the website, you know 1014.28s - 1020.96s | I want an exploit that just like straight-up works like basically a web exploit even though it's binary and also bonus points if it doesn't match 1022.48s - 1024.52s | So how can we do this? 1024.52s - 1029.20s | Well, the first one that we face is that even though there is the bucket brigade technology in PHP 1029.36s - 1032.00s | You will always get one bucket when you read a stream 1032.00s - 1035.84s | So if PHP reads ETC password, it will give you one bucket with the whole file 1036.08s - 1039.92s | If it reads an HTTP resource, it will give you one brick one bucket 1039.92s - 1044.12s | Sorry with the whole HTTP response into it same for FTP same for everything 1044.12s - 1050.32s | You always get one bucket and one bucket. It's completely impractical for exploitation because we cannot spray the heap 1050.32s - 1053.60s | We cannot pad the heap and we can't even use an altered free list 1053.60s - 1056.96s | Like if we use one bucket to trigger the overflow, we have an altered free list 1056.96s


chunk_id: 207_chunk_21
chunk_text:
the website, you know 1014.28s - 1020.96s | I want an exploit that just like straight-up works like basically a web exploit even though it's binary and also bonus points if it doesn't match 1022.48s - 1024.52s | So how can we do this? 1024.52s - 1029.20s | Well, the first one that we face is that even though there is the bucket brigade technology in PHP 1029.36s - 1032.00s | You will always get one bucket when you read a stream 1032.00s - 1035.84s | So if PHP reads ETC password, it will give you one bucket with the whole file 1036.08s - 1039.92s | If it reads an HTTP resource, it will give you one brick one bucket 1039.92s - 1044.12s | Sorry with the whole HTTP response into it same for FTP same for everything 1044.12s - 1050.32s | You always get one bucket and one bucket. It's completely impractical for exploitation because we cannot spray the heap 1050.32s - 1053.60s | We cannot pad the heap and we can't even use an altered free list 1053.60s - 1056.96s | Like if we use one bucket to trigger the overflow, we have an altered free list 1056.96s - 1059.68s | But then we need at least two more locations to be able to use this 1059.68s - 1065.44s | This altered free list and we cannot do this because we have used our single bucket. So we're not going to be able to exploit 1067.16s - 1067.96s | Luckily for us 1067.96s - 1073.28s | There's a single filter that allows us to create as many buckets as we want and this filter is deadly bin flakes 1073.36s - 1075.36s | What it does is that it will read? 1076.16s - 1078.16s | your stream and decompress it as 1078.80s - 1083.28s | With the Zlib algorithm and the way it works is that it will allocate eight pages 1083.80s - 1086.68s | A buffer of eight pages and then decompress into it 1086.84s - 1091.16s | If it's not big enough, it will create eight more pages and decompress the rest into it 1091.16s - 1095.24s | If it's still not big enough, it will create a third bucket, etc, etc, etc 1095.56s - 1100.80s | So this filter it gives us a way to go from one bucket to as many as we want 1100.84s


chunk_id: 207_chunk_22
chunk_text:
- 1059.68s | But then we need at least two more locations to be able to use this 1059.68s - 1065.44s | This altered free list and we cannot do this because we have used our single bucket. So we're not going to be able to exploit 1067.16s - 1067.96s | Luckily for us 1067.96s - 1073.28s | There's a single filter that allows us to create as many buckets as we want and this filter is deadly bin flakes 1073.36s - 1075.36s | What it does is that it will read? 1076.16s - 1078.16s | your stream and decompress it as 1078.80s - 1083.28s | With the Zlib algorithm and the way it works is that it will allocate eight pages 1083.80s - 1086.68s | A buffer of eight pages and then decompress into it 1086.84s - 1091.16s | If it's not big enough, it will create eight more pages and decompress the rest into it 1091.16s - 1095.24s | If it's still not big enough, it will create a third bucket, etc, etc, etc 1095.56s - 1100.80s | So this filter it gives us a way to go from one bucket to as many as we want 1100.84s - 1105.08s | But the problem that we have is that every bucket has a size of eight pages 1105.08s - 1111.64s | Which is way too big to exploit because well it takes more it takes two more space too much space 1111.64s - 1116.00s | Sorry, and also it's not going to be allocated the same way as small chunks 1116.52s - 1118.52s | so we need a way to change the size of 1118.96s - 1124.76s | Each of these buckets and a way to do this is to use another filter, which is called G chunk 1125.24s - 1132.72s | It's undocumented, but it's been used by many actors before so it's pretty well known and the idea is that it will take an HTTP 1132.72s - 1134.72s | chunked uncoded 1135.08s - 1141.04s | String and simply decode it. So for those who don't know the HTTP chunked encoding is very simple 1141.12s - 1142.12s | it 1142.12s - 1144.00s | consists of sending a 1144.00s - 1149.88s | Size as ASCII X and then sending the data then a new size as ASCII X and then sending the data, etc 1149.88s - 1157.40s |


chunk_id: 207_chunk_23
chunk_text:
- 1105.08s | But the problem that we have is that every bucket has a size of eight pages 1105.08s - 1111.64s | Which is way too big to exploit because well it takes more it takes two more space too much space 1111.64s - 1116.00s | Sorry, and also it's not going to be allocated the same way as small chunks 1116.52s - 1118.52s | so we need a way to change the size of 1118.96s - 1124.76s | Each of these buckets and a way to do this is to use another filter, which is called G chunk 1125.24s - 1132.72s | It's undocumented, but it's been used by many actors before so it's pretty well known and the idea is that it will take an HTTP 1132.72s - 1134.72s | chunked uncoded 1135.08s - 1141.04s | String and simply decode it. So for those who don't know the HTTP chunked encoding is very simple 1141.12s - 1142.12s | it 1142.12s - 1144.00s | consists of sending a 1144.00s - 1149.88s | Size as ASCII X and then sending the data then a new size as ASCII X and then sending the data, etc 1149.88s - 1157.40s | So the diction the teaching filter what it does is that it will read a size as ASCII X then reads the amount of bytes 1157.40s - 1158.64s | That corresponds to this size 1158.64s - 1162.28s | So for instance, if it reads 8 as in the example, it will read 8 bytes 1162.40s - 1166.36s | Then it will read 11 and since it's ASCII X it's 17 1166.36s - 1172.60s | So it will read 17 bytes and then you would read the read the D bytes and then it will read 0 and 0 1172.60s - 1179.96s | It doesn't indicate an empty chunk. It indicates the end of the D chunking. So when you receive 0 it stops processing the data 1181.40s - 1182.64s | so 1182.64s - 1186.48s | Now you probably have an idea of how we can resize our chunks 1186.96s - 1189.96s | We take bucket 1 if you wanted to have a size of 148 1190.16s - 1196.48s | We write 148 then 148 bytes and then 0 if we want bucket 2 to have a size of 100 1196.48s - 1202.08s | we do the same we write 100


chunk_id: 207_chunk_24
chunk_text:
So the diction the teaching filter what it does is that it will read a size as ASCII X then reads the amount of bytes 1157.40s - 1158.64s | That corresponds to this size 1158.64s - 1162.28s | So for instance, if it reads 8 as in the example, it will read 8 bytes 1162.40s - 1166.36s | Then it will read 11 and since it's ASCII X it's 17 1166.36s - 1172.60s | So it will read 17 bytes and then you would read the read the D bytes and then it will read 0 and 0 1172.60s - 1179.96s | It doesn't indicate an empty chunk. It indicates the end of the D chunking. So when you receive 0 it stops processing the data 1181.40s - 1182.64s | so 1182.64s - 1186.48s | Now you probably have an idea of how we can resize our chunks 1186.96s - 1189.96s | We take bucket 1 if you wanted to have a size of 148 1190.16s - 1196.48s | We write 148 then 148 bytes and then 0 if we want bucket 2 to have a size of 100 1196.48s - 1202.08s | we do the same we write 100 then all bytes and then 0 and we do the same with every chunk and 1202.40s - 1206.96s | Then when we apply D chunk on to this we expect it to resize every single bucket 1207.16s - 1212.24s | but you may like notice that this will work because even though each bucket is 1213.20s - 1216.08s | Different they are all processed as one stream 1216.12s - 1220.96s | So if in bucket 1 you indicate that it's the end of the string of the stream 1220.96s - 1226.08s | Sorry with the 0 at the very bottom. It will not process bucket 2. It will not process bucket 3 1226.08s - 1232.64s | It will not process any bucket that comes after so you go back to a single bucket with an arbitrary size, which is completely useless 1233.28s - 1236.44s | so luckily for us there's a way to improve this and 1237.20s - 1243.80s | The way to improve this is to pad the size with thousands of zeros such as what we can see here 1243.84s - 1249.40s | The idea is that in each bucket we will have one chunk size and one


chunk_id: 207_chunk_25
chunk_text:
then all bytes and then 0 and we do the same with every chunk and 1202.40s - 1206.96s | Then when we apply D chunk on to this we expect it to resize every single bucket 1207.16s - 1212.24s | but you may like notice that this will work because even though each bucket is 1213.20s - 1216.08s | Different they are all processed as one stream 1216.12s - 1220.96s | So if in bucket 1 you indicate that it's the end of the string of the stream 1220.96s - 1226.08s | Sorry with the 0 at the very bottom. It will not process bucket 2. It will not process bucket 3 1226.08s - 1232.64s | It will not process any bucket that comes after so you go back to a single bucket with an arbitrary size, which is completely useless 1233.28s - 1236.44s | so luckily for us there's a way to improve this and 1237.20s - 1243.80s | The way to improve this is to pad the size with thousands of zeros such as what we can see here 1243.84s - 1249.40s | The idea is that in each bucket we will have one chunk size and one chunk data and that's it nothing else 1249.48s - 1252.04s | So now if the D chunk filter is applied 1252.52s - 1255.20s | We will have bucket 1 that gets processed 1255.20s - 1261.12s | it will read the size read thousands of zeros then the real size then the data and then it will go on to bucket 2 and 1261.12s - 1267.00s | Do exactly the same you will read the size read the data then bucket 3 read the size with the data and you can see 1267.40s - 1270.32s | That's bucket 1 can be resized to the proper size 1270.32s - 1275.36s | bucket 2 as well bucket 3 as well and bucket 4 as well and now we have a way to create as many buckets as 1275.36s - 1280.86s | We want and change the size and this is only with two filters. So it's pretty promising 1282.96s - 1290.64s | But that's not enough because we can only send one request so we need a whole exploits algorithm in a single request and 1291.28s - 1295.24s | We have a single PHP filter string. So, how do we do this? Well


chunk_id: 207_chunk_26
chunk_text:
chunk data and that's it nothing else 1249.48s - 1252.04s | So now if the D chunk filter is applied 1252.52s - 1255.20s | We will have bucket 1 that gets processed 1255.20s - 1261.12s | it will read the size read thousands of zeros then the real size then the data and then it will go on to bucket 2 and 1261.12s - 1267.00s | Do exactly the same you will read the size read the data then bucket 3 read the size with the data and you can see 1267.40s - 1270.32s | That's bucket 1 can be resized to the proper size 1270.32s - 1275.36s | bucket 2 as well bucket 3 as well and bucket 4 as well and now we have a way to create as many buckets as 1275.36s - 1280.86s | We want and change the size and this is only with two filters. So it's pretty promising 1282.96s - 1290.64s | But that's not enough because we can only send one request so we need a whole exploits algorithm in a single request and 1291.28s - 1295.24s | We have a single PHP filter string. So, how do we do this? Well instead of 1295.80s - 1302.44s | Only being able to allocate once we cannot want to be able to allocate several times to represent the different steps of the exploits 1302.44s - 1306.60s | In step one, I want to allocate a few times instead to I want to allocate a few more chunks, etc 1306.60s - 1308.98s | Etc. And at this point we are not able to do this 1309.20s - 1313.40s | But to do this what we can do is think about the PHP if it's page based 1313.40s - 1317.24s | So if I focus my exploitation on one chunk size a single chunk size 1317.24s - 1322.36s | That means that chunks that are bigger or smaller than this chunk size. They do not really matter 1322.36s - 1328.04s | I will not have to think about them in my export algorithm if a chunk if of size or x 200 for instance 1328.04s - 1332.84s | And I'm focusing on chunks of size or x 100 the chunk will not affect my exploitation 1332.84s - 1339.72s | So at this point if I focus on some very specific chunk size such as weeks


chunk_id: 207_chunk_27
chunk_text:
instead of 1295.80s - 1302.44s | Only being able to allocate once we cannot want to be able to allocate several times to represent the different steps of the exploits 1302.44s - 1306.60s | In step one, I want to allocate a few times instead to I want to allocate a few more chunks, etc 1306.60s - 1308.98s | Etc. And at this point we are not able to do this 1309.20s - 1313.40s | But to do this what we can do is think about the PHP if it's page based 1313.40s - 1317.24s | So if I focus my exploitation on one chunk size a single chunk size 1317.24s - 1322.36s | That means that chunks that are bigger or smaller than this chunk size. They do not really matter 1322.36s - 1328.04s | I will not have to think about them in my export algorithm if a chunk if of size or x 200 for instance 1328.04s - 1332.84s | And I'm focusing on chunks of size or x 100 the chunk will not affect my exploitation 1332.84s - 1339.72s | So at this point if I focus on some very specific chunk size such as weeks 100 chunks that are bigger or smaller 1339.72s - 1342.06s | They do not matter. It's as if they were they weren't there 1342.06s - 1346.46s | so the only thing that I need to be able to do is to be able to resize buckets as the 1346.52s - 1349.48s | Exploitation goes on and to be able to do this. I built 1350.00s - 1351.48s | buckets that are 1351.48s - 1357.52s | Russian dolls of d-chunk algorithm. So the idea is that every time I call d-chunk on some buckets 1358.04s - 1364.76s | Its size will change and that means that I can make buckets appear at some point in the exploitation and then others 1365.12s - 1367.56s | appear at another step of the exploitation and 1367.96s - 1374.86s | That basically means that I can allocate and deallocate at will and at this point. I'm really really close to getting an exploit working 1375.92s - 1377.04s | and 1377.04s - 1383.20s | the final idea here is that we have a one byte overflow using the icon bug and we want to 1384.92s - 1390.40s | Use it to alter some free list and


chunk_id: 207_chunk_28
chunk_text:
100 chunks that are bigger or smaller 1339.72s - 1342.06s | They do not matter. It's as if they were they weren't there 1342.06s - 1346.46s | so the only thing that I need to be able to do is to be able to resize buckets as the 1346.52s - 1349.48s | Exploitation goes on and to be able to do this. I built 1350.00s - 1351.48s | buckets that are 1351.48s - 1357.52s | Russian dolls of d-chunk algorithm. So the idea is that every time I call d-chunk on some buckets 1358.04s - 1364.76s | Its size will change and that means that I can make buckets appear at some point in the exploitation and then others 1365.12s - 1367.56s | appear at another step of the exploitation and 1367.96s - 1374.86s | That basically means that I can allocate and deallocate at will and at this point. I'm really really close to getting an exploit working 1375.92s - 1377.04s | and 1377.04s - 1383.20s | the final idea here is that we have a one byte overflow using the icon bug and we want to 1384.92s - 1390.40s | Use it to alter some free list and get complete control over it and the way that we can do 1390.40s - 1394.96s | This is a six-step process, which is pretty simple, but I will still explain it to you. It's 1396.24s - 1398.16s | First we will start in step one 1398.16s - 1402.96s | So and we're gonna have three chunks ABC and each chunk is freed 1402.96s - 1405.96s | We have A that points to B and B that points to C 1406.04s - 1410.20s | Then we allocate these three chunks and we free them we get in step three 1410.20s - 1414.68s | And the only difference with step one is that now we have C that points to B that points to A so we have reversed 1414.68s - 1415.60s | the free list 1415.60s - 1421.24s | Now we allocate in C a buffer which contains at offset 48 an arbitrary pointer 1421.28s - 1424.04s | Which is represented here with 1 1 2 2 4 4 1424.68s - 1425.96s | etc 1425.96s - 1432.16s | Then we allocate B and A and then we free everything and we get into step 5 and we we have exactly the


chunk_id: 207_chunk_29
chunk_text:
get complete control over it and the way that we can do 1390.40s - 1394.96s | This is a six-step process, which is pretty simple, but I will still explain it to you. It's 1396.24s - 1398.16s | First we will start in step one 1398.16s - 1402.96s | So and we're gonna have three chunks ABC and each chunk is freed 1402.96s - 1405.96s | We have A that points to B and B that points to C 1406.04s - 1410.20s | Then we allocate these three chunks and we free them we get in step three 1410.20s - 1414.68s | And the only difference with step one is that now we have C that points to B that points to A so we have reversed 1414.68s - 1415.60s | the free list 1415.60s - 1421.24s | Now we allocate in C a buffer which contains at offset 48 an arbitrary pointer 1421.28s - 1424.04s | Which is represented here with 1 1 2 2 4 4 1424.68s - 1425.96s | etc 1425.96s - 1432.16s | Then we allocate B and A and then we free everything and we get into step 5 and we we have exactly the same 1432.76s - 1437.76s | E play out and free list as in step 1 but in the chunk C 1437.76s - 1441.76s | We have an arbitrary pointer at offset 48. So now you can probably see where this is going 1442.28s - 1445.76s | We overflow using chunk A into chunk B 1445.96s - 1452.76s | So the free list that was B to C is now B to C plus 48 and what we have in C plus 48 is 1452.76s - 1454.60s | Another pointer that we added ourselves 1454.60s - 1460.96s | So with three more locations, we will locate B C plus 48 and then we will allocate arbitrary pointer 1461.20s - 1468.16s | And now we are able to have a write what where which is really really close to getting code execution 1470.16s - 1472.96s | But now we have to think about like how we can do this 1472.96s - 1477.76s | Well as I've said before the PHP heap, it's really easy to find it in proc set map 1477.76s - 1481.92s | So we have it to us and also at the very top of the PHP heap 1481.92s


chunk_id: 207_chunk_30
chunk_text:
same 1432.76s - 1437.76s | E play out and free list as in step 1 but in the chunk C 1437.76s - 1441.76s | We have an arbitrary pointer at offset 48. So now you can probably see where this is going 1442.28s - 1445.76s | We overflow using chunk A into chunk B 1445.96s - 1452.76s | So the free list that was B to C is now B to C plus 48 and what we have in C plus 48 is 1452.76s - 1454.60s | Another pointer that we added ourselves 1454.60s - 1460.96s | So with three more locations, we will locate B C plus 48 and then we will allocate arbitrary pointer 1461.20s - 1468.16s | And now we are able to have a write what where which is really really close to getting code execution 1470.16s - 1472.96s | But now we have to think about like how we can do this 1472.96s - 1477.76s | Well as I've said before the PHP heap, it's really easy to find it in proc set map 1477.76s - 1481.92s | So we have it to us and also at the very top of the PHP heap 1481.92s - 1486.00s | there is a send mmip structure that contains a few things and 1486.96s - 1490.48s | Also a few alternative heap function pointers 1490.48s - 1493.48s | So for those again, we do heap exploitation on ptMalloc 1493.48s - 1496.32s | It would be the same as free hook malloc hook and realloc hook 1496.40s - 1500.40s | Those are pointers that if you like set them to something else that null 1500.40s - 1503.16s | They're going to be called inside of the original function 1503.16s - 1509.76s | And so since it's basically the same as the glibc I can use the glibc technique and I can override free with system 1509.76s - 1515.24s | So now when PHP wants to free a chunk, it will call free but it will instead call system and this gives me 1515.64s - 1520.12s | This gives me sorry. Well way to call an arbitrary comment and 1521.04s - 1522.40s | so 1522.40s - 1525.08s | With everything put together. What do we have? 1525.20s - 1531.00s | We have an exploit that works against any targets from PHP 8 to the current version 1531.00s - 1535.40s |


chunk_id: 207_chunk_31
chunk_text:
- 1486.00s | there is a send mmip structure that contains a few things and 1486.96s - 1490.48s | Also a few alternative heap function pointers 1490.48s - 1493.48s | So for those again, we do heap exploitation on ptMalloc 1493.48s - 1496.32s | It would be the same as free hook malloc hook and realloc hook 1496.40s - 1500.40s | Those are pointers that if you like set them to something else that null 1500.40s - 1503.16s | They're going to be called inside of the original function 1503.16s - 1509.76s | And so since it's basically the same as the glibc I can use the glibc technique and I can override free with system 1509.76s - 1515.24s | So now when PHP wants to free a chunk, it will call free but it will instead call system and this gives me 1515.64s - 1520.12s | This gives me sorry. Well way to call an arbitrary comment and 1521.04s - 1522.40s | so 1522.40s - 1525.08s | With everything put together. What do we have? 1525.20s - 1531.00s | We have an exploit that works against any targets from PHP 8 to the current version 1531.00s - 1535.40s | Which is sorry PHP 7 to the current version, which is h3 something 1535.40s - 1539.12s | So that's 10 years of PHP covered with a single binary exploits 1539.12s - 1542.76s | And also it works against any PHP application because we can pad the heap 1542.76s - 1548.08s | So even if like the the website chooses a lot of chunks of size or extra hundred, it will still work 1548.08s - 1553.80s | It doesn't matter in addition to this the exploit is completely deterministic. So it's 100% reliable 1554.00s - 1557.48s | So you will never get a crash. So it's pretty cool and 1558.56s - 1561.16s | final good thing about the exploits is that 1561.40s - 1566.80s | The payload is really small because the first gadget that we use the first filter that we use is a Zlib inflate 1566.80s - 1570.32s | so it will decompress the payload so originally it's compressed so it's very small and 1571.32s - 1578.60s | The last good thing that we can say about the exploit is that it's completely self-contained like the old algorithm of the exploit is 1578.60s - 1583.60s | In one PHP


chunk_id: 207_chunk_32
chunk_text:
Which is sorry PHP 7 to the current version, which is h3 something 1535.40s - 1539.12s | So that's 10 years of PHP covered with a single binary exploits 1539.12s - 1542.76s | And also it works against any PHP application because we can pad the heap 1542.76s - 1548.08s | So even if like the the website chooses a lot of chunks of size or extra hundred, it will still work 1548.08s - 1553.80s | It doesn't matter in addition to this the exploit is completely deterministic. So it's 100% reliable 1554.00s - 1557.48s | So you will never get a crash. So it's pretty cool and 1558.56s - 1561.16s | final good thing about the exploits is that 1561.40s - 1566.80s | The payload is really small because the first gadget that we use the first filter that we use is a Zlib inflate 1566.80s - 1570.32s | so it will decompress the payload so originally it's compressed so it's very small and 1571.32s - 1578.60s | The last good thing that we can say about the exploit is that it's completely self-contained like the old algorithm of the exploit is 1578.60s - 1583.60s | In one PHP filter string, which means that you don't have to send additional get or post parameters 1583.60s - 1586.12s | Like you just need your PHP filter string and you get SE 1586.68s - 1592.16s | So every file reading primitive now that you have on PHP you have SE instead, which is pretty nice 1593.28s - 1597.00s | I'm going to show you a demo that actually involves cosmic sting 1597.00s - 1601.96s | Which is a Magento X6e which is pre-authentication and it came out after I published my bug 1601.96s - 1606.56s | so it was in June and the original impact was being able to read files and 1607.40s - 1612.44s | Using this file that you've read you would be able to craft API keys. And so you would get 1613.40s - 1619.16s | An access which is similar to an administrator level on Magento, but you wouldn't be able to get SE 1619.40s - 1623.92s | But with the bug that we have now we get the SE easily because we have an X6e 1623.92s - 1629.92s | So we can force it into reading any file and therefore we can read a PHP filter


chunk_id: 207_chunk_33
chunk_text:
filter string, which means that you don't have to send additional get or post parameters 1583.60s - 1586.12s | Like you just need your PHP filter string and you get SE 1586.68s - 1592.16s | So every file reading primitive now that you have on PHP you have SE instead, which is pretty nice 1593.28s - 1597.00s | I'm going to show you a demo that actually involves cosmic sting 1597.00s - 1601.96s | Which is a Magento X6e which is pre-authentication and it came out after I published my bug 1601.96s - 1606.56s | so it was in June and the original impact was being able to read files and 1607.40s - 1612.44s | Using this file that you've read you would be able to craft API keys. And so you would get 1613.40s - 1619.16s | An access which is similar to an administrator level on Magento, but you wouldn't be able to get SE 1619.40s - 1623.92s | But with the bug that we have now we get the SE easily because we have an X6e 1623.92s - 1629.92s | So we can force it into reading any file and therefore we can read a PHP filter string and get SE 1630.56s - 1633.09s | so 1633.09s - 1635.01s | quick demo 1635.01s - 1637.01s | Which is not on the right screen 1643.53s - 1645.73s | So I cannot see it but 1646.25s - 1652.61s | It's probably pretty easy to understand you have the Magento website on the left and then you have an exploit on the right and in 1652.61s - 1655.73s | A few moments you will have a shell on the bottom 1656.73s - 1664.56s | There you go 1674.73s - 1676.73s | Nope oh 1684.84s - 1686.84s | Yeah, yeah, right, thanks 1687.92s - 1689.92s | There we go, thank you 1691.00s - 1705.00s | So, oh I lost my on the other screen. I lost it. Okay. There we go 1705.88s - 1707.88s | Okay, does that work 1708.28s - 1709.60s | Yeah 1709.60s - 1715.68s | Okay. So now that we have exploited PHP filters, we want to do a completely different exploitation because 1716.24s - 1721.64s | PHP filters are not the only way in which can reach icon using PHP 1721.72s - 1726.44s | There's another way that is way simpler. It is when PHP calls icon


chunk_id: 207_chunk_34
chunk_text:
string and get SE 1630.56s - 1633.09s | so 1633.09s - 1635.01s | quick demo 1635.01s - 1637.01s | Which is not on the right screen 1643.53s - 1645.73s | So I cannot see it but 1646.25s - 1652.61s | It's probably pretty easy to understand you have the Magento website on the left and then you have an exploit on the right and in 1652.61s - 1655.73s | A few moments you will have a shell on the bottom 1656.73s - 1664.56s | There you go 1674.73s - 1676.73s | Nope oh 1684.84s - 1686.84s | Yeah, yeah, right, thanks 1687.92s - 1689.92s | There we go, thank you 1691.00s - 1705.00s | So, oh I lost my on the other screen. I lost it. Okay. There we go 1705.88s - 1707.88s | Okay, does that work 1708.28s - 1709.60s | Yeah 1709.60s - 1715.68s | Okay. So now that we have exploited PHP filters, we want to do a completely different exploitation because 1716.24s - 1721.64s | PHP filters are not the only way in which can reach icon using PHP 1721.72s - 1726.44s | There's another way that is way simpler. It is when PHP calls icon directly 1727.16s - 1736.31s | And so there's a PHP function that does this it's called icon. So 1736.95s - 1741.67s | How do we exploit such a call to icon well, it's very very different to 1742.43s - 1745.27s | The attack that we've seen using PHP filters 1745.71s - 1749.15s | So here we don't have a favorite primitive 1749.15s - 1754.47s | So we cannot just read proxy maps or read like the lipsy or anything like we need to go 1754.47s - 1756.15s | I would say old-school 1756.15s - 1764.07s | Exploitation where we need an info leak to get some pointers and then we can start going with the exploitation and in PHP generally 1764.07s - 1766.07s | which when you want to have 1767.99s - 1773.35s | An info leak what you do is that you will try and alter the length field of a ZenString 1773.55s - 1779.79s | So ZenString it's the representation of PHP of your PHP string and the length field 1779.79s - 1781.41s | It will store the size of the string 1781.41s - 1786.81s | So if you are able to change the length of a string


chunk_id: 207_chunk_35
chunk_text:
directly 1727.16s - 1736.31s | And so there's a PHP function that does this it's called icon. So 1736.95s - 1741.67s | How do we exploit such a call to icon well, it's very very different to 1742.43s - 1745.27s | The attack that we've seen using PHP filters 1745.71s - 1749.15s | So here we don't have a favorite primitive 1749.15s - 1754.47s | So we cannot just read proxy maps or read like the lipsy or anything like we need to go 1754.47s - 1756.15s | I would say old-school 1756.15s - 1764.07s | Exploitation where we need an info leak to get some pointers and then we can start going with the exploitation and in PHP generally 1764.07s - 1766.07s | which when you want to have 1767.99s - 1773.35s | An info leak what you do is that you will try and alter the length field of a ZenString 1773.55s - 1779.79s | So ZenString it's the representation of PHP of your PHP string and the length field 1779.79s - 1781.41s | It will store the size of the string 1781.41s - 1786.81s | So if you are able to change the length of a string and then it gets it gets displayed 1786.81s - 1787.31s | Sorry 1787.31s - 1787.81s | well 1787.81s - 1795.39s | you are able to make PHP display more bytes than it should and probably display like lots of useful information from the heap such as 1795.39s - 1797.11s | addresses 1797.23s - 1802.83s | Sadly for us the bug that we have as I've said really really bad. We only have one two, three bytes overflow 1802.83s - 1806.59s | So if we try to overflow into a ZenString, we will just overwrite the ref count 1807.51s - 1810.39s | With values that we don't even control. So it's pretty useless 1811.79s - 1813.79s | so what we need to do is 1814.31s - 1819.75s | Kind of the same as before where we alter some free lists and if we manage to alter some free lists 1819.75s - 1821.71s | We are able to make two chunks overlap 1821.71s - 1827.03s | And if we have two chunks that overlap we can use the first one to store a string that is bound to be displayed 1827.03s - 1832.43s | And then use the second one on top


chunk_id: 207_chunk_36
chunk_text:
and then it gets it gets displayed 1786.81s - 1787.31s | Sorry 1787.31s - 1787.81s | well 1787.81s - 1795.39s | you are able to make PHP display more bytes than it should and probably display like lots of useful information from the heap such as 1795.39s - 1797.11s | addresses 1797.23s - 1802.83s | Sadly for us the bug that we have as I've said really really bad. We only have one two, three bytes overflow 1802.83s - 1806.59s | So if we try to overflow into a ZenString, we will just overwrite the ref count 1807.51s - 1810.39s | With values that we don't even control. So it's pretty useless 1811.79s - 1813.79s | so what we need to do is 1814.31s - 1819.75s | Kind of the same as before where we alter some free lists and if we manage to alter some free lists 1819.75s - 1821.71s | We are able to make two chunks overlap 1821.71s - 1827.03s | And if we have two chunks that overlap we can use the first one to store a string that is bound to be displayed 1827.03s - 1832.43s | And then use the second one on top of it to overwrite the length field and when the string gets displayed 1832.43s - 1836.39s | We actually are able to see what comes afterwards in memory 1838.53s - 1842.83s | The problem is that here we completely rely on the code beforehand 1842.83s - 1849.15s | We could like implement an algorithm using PHP filters as I've shown but here we only have a single call to icon 1849.15s - 1851.15s | And that's it. Nothing else. So 1851.39s - 1853.39s | Getting it to work would 1854.03s - 1857.27s | Make us like reliant on the code that comes after 1857.83s - 1863.55s | The call to icon and to explain this a very simple example say that you have this piece of code 1864.99s - 1871.71s | We control the output charset, we control the input text so it's clear that we can trigger the bug 1872.83s - 1876.27s | But right after the bug has been triggered the script will end 1876.63s - 1881.79s | So there's absolutely no way for us to use the bug after it's been triggered because the heap will be destroyed 1882.79s - 1888.31s | If you're lucky, however, you


chunk_id: 207_chunk_37
chunk_text:
of it to overwrite the length field and when the string gets displayed 1832.43s - 1836.39s | We actually are able to see what comes afterwards in memory 1838.53s - 1842.83s | The problem is that here we completely rely on the code beforehand 1842.83s - 1849.15s | We could like implement an algorithm using PHP filters as I've shown but here we only have a single call to icon 1849.15s - 1851.15s | And that's it. Nothing else. So 1851.39s - 1853.39s | Getting it to work would 1854.03s - 1857.27s | Make us like reliant on the code that comes after 1857.83s - 1863.55s | The call to icon and to explain this a very simple example say that you have this piece of code 1864.99s - 1871.71s | We control the output charset, we control the input text so it's clear that we can trigger the bug 1872.83s - 1876.27s | But right after the bug has been triggered the script will end 1876.63s - 1881.79s | So there's absolutely no way for us to use the bug after it's been triggered because the heap will be destroyed 1882.79s - 1888.31s | If you're lucky, however, you might find a line such as this one after your call to icon 1888.87s - 1896.35s | This line is the same as splits in Python. So it will take a string and explode it. So split it along a token 1896.35s - 1898.35s | so here the token is new like and 1899.31s - 1901.39s | If you have a line such as this one 1901.39s - 1907.43s | you can create as many chunks as you want because it will take your string and split it along a non separator and 1907.75s - 1911.95s | That will give you a way to use the bug right after it's been triggered and then probably 1912.51s - 1916.31s | Exploits the bug. So this is what I call a code gadget actually 1916.31s - 1921.75s | that's a way to get to using your bug starting from the 1922.55s - 1924.55s | position where icon has been called and 1925.91s - 1930.47s | To give you an idea of how it can be implemented in in the real world 1930.47s - 1935.23s | I will show you a demo well and explain to you the demo on round cube 1935.87s


chunk_id: 207_chunk_38
chunk_text:
might find a line such as this one after your call to icon 1888.87s - 1896.35s | This line is the same as splits in Python. So it will take a string and explode it. So split it along a token 1896.35s - 1898.35s | so here the token is new like and 1899.31s - 1901.39s | If you have a line such as this one 1901.39s - 1907.43s | you can create as many chunks as you want because it will take your string and split it along a non separator and 1907.75s - 1911.95s | That will give you a way to use the bug right after it's been triggered and then probably 1912.51s - 1916.31s | Exploits the bug. So this is what I call a code gadget actually 1916.31s - 1921.75s | that's a way to get to using your bug starting from the 1922.55s - 1924.55s | position where icon has been called and 1925.91s - 1930.47s | To give you an idea of how it can be implemented in in the real world 1930.47s - 1935.23s | I will show you a demo well and explain to you the demo on round cube 1935.87s - 1943.19s | Round cube for those who don't know it's a web mail that is very much used in it's probably the most well-known in PHP 1943.23s - 1947.55s | it's used by hostess generally or private companies even I've seen it a lot and 1948.91s - 1951.07s | Well, yeah, it's it's used a lot 1951.59s - 1954.83s | And so when you're logged into round cube and you want to send an email 1955.27s - 1957.63s | You have to specify email addresses 1957.63s - 1963.95s | And so you specify the two fields the CC field and the BCC field you can guess what they are 1963.95s - 1965.79s | You've already sent an email 1965.79s - 1968.19s | in addition to this you can send 1968.91s - 1972.75s | Another parameter which is charset and every parameter that you send 1972.75s - 1975.67s | So the underscore to underscore CC and underscore BCC parameter 1975.83s - 1980.35s | They are all going to be cast to the charset that you said and it's going to be done using icon 1980.47s - 1985.19s | So in this single script here, you have three ways of triggering


chunk_id: 207_chunk_39
chunk_text:
- 1943.19s | Round cube for those who don't know it's a web mail that is very much used in it's probably the most well-known in PHP 1943.23s - 1947.55s | it's used by hostess generally or private companies even I've seen it a lot and 1948.91s - 1951.07s | Well, yeah, it's it's used a lot 1951.59s - 1954.83s | And so when you're logged into round cube and you want to send an email 1955.27s - 1957.63s | You have to specify email addresses 1957.63s - 1963.95s | And so you specify the two fields the CC field and the BCC field you can guess what they are 1963.95s - 1965.79s | You've already sent an email 1965.79s - 1968.19s | in addition to this you can send 1968.91s - 1972.75s | Another parameter which is charset and every parameter that you send 1972.75s - 1975.67s | So the underscore to underscore CC and underscore BCC parameter 1975.83s - 1980.35s | They are all going to be cast to the charset that you said and it's going to be done using icon 1980.47s - 1985.19s | So in this single script here, you have three ways of triggering your bug 1985.67s - 1990.79s | you can trigger it using underscore to or with underscore CC or with underscore BCC and 1991.15s - 1997.95s | Right after this there's something even better if one of the emails is not valid you will get an error message that says well 1997.95s - 2000.59s | This is an invalid email colon your email 2001.31s - 2002.59s | So what can we do with this? 2002.59s - 2008.71s | Well, this is textbook the strategy that I was telling you about before the idea is that 2009.47s - 2014.99s | You set underscore to to an invalid email so that invalid email gets it. It's ready to be displayed in the error message 2015.03s - 2018.83s | so now what we want to do is modify its length before it's 2019.51s - 2020.95s | Included in the error message 2020.95s - 2026.71s | so then we use CC to trigger the bug and we have a free list that is altered and then we use BCC to 2026.71s - 2031.43s | allocate a few strings so that we have a string that gets allocated on top of invalid email and 2031.71s -


chunk_id: 207_chunk_40
chunk_text:
your bug 1985.67s - 1990.79s | you can trigger it using underscore to or with underscore CC or with underscore BCC and 1991.15s - 1997.95s | Right after this there's something even better if one of the emails is not valid you will get an error message that says well 1997.95s - 2000.59s | This is an invalid email colon your email 2001.31s - 2002.59s | So what can we do with this? 2002.59s - 2008.71s | Well, this is textbook the strategy that I was telling you about before the idea is that 2009.47s - 2014.99s | You set underscore to to an invalid email so that invalid email gets it. It's ready to be displayed in the error message 2015.03s - 2018.83s | so now what we want to do is modify its length before it's 2019.51s - 2020.95s | Included in the error message 2020.95s - 2026.71s | so then we use CC to trigger the bug and we have a free list that is altered and then we use BCC to 2026.71s - 2031.43s | allocate a few strings so that we have a string that gets allocated on top of invalid email and 2031.71s - 2035.35s | This will alter its size and therefore the error 2035.51s - 2041.35s | When it gets displayed will display more bytes than it should and we will be able to get a memory leak, which is nice 2042.27s - 2044.99s | So I implemented this and it was really fast. It took me a few hours 2044.99s - 2047.95s | So I was really happy with it and I started it and it didn't work 2047.95s - 2053.03s | And the reason for this is that when PHP when roundtube sends an error message 2053.03s - 2058.97s | It's converted to JSON and when PHP converts to JSON every byte that is not valid UTF-8 is removed 2059.11s - 2064.13s | so you have a memory leak, but you don't really have any bytes of interest because 2064.87s - 2067.07s | Generally addresses are not going to be valid UTF-8 2067.07s - 2072.43s | So they're just going to be removed any raw data in memory is not going to be valid UTF-8 is going to be removed 2072.43s - 2077.79s | So what you get is a memory leak which consists of over like only ASCII characters


chunk_id: 207_chunk_41
chunk_text:
2035.35s | This will alter its size and therefore the error 2035.51s - 2041.35s | When it gets displayed will display more bytes than it should and we will be able to get a memory leak, which is nice 2042.27s - 2044.99s | So I implemented this and it was really fast. It took me a few hours 2044.99s - 2047.95s | So I was really happy with it and I started it and it didn't work 2047.95s - 2053.03s | And the reason for this is that when PHP when roundtube sends an error message 2053.03s - 2058.97s | It's converted to JSON and when PHP converts to JSON every byte that is not valid UTF-8 is removed 2059.11s - 2064.13s | so you have a memory leak, but you don't really have any bytes of interest because 2064.87s - 2067.07s | Generally addresses are not going to be valid UTF-8 2067.07s - 2072.43s | So they're just going to be removed any raw data in memory is not going to be valid UTF-8 is going to be removed 2072.43s - 2077.79s | So what you get is a memory leak which consists of over like only ASCII characters and new bytes 2077.95s - 2079.55s | Which is completely useless 2079.55s - 2083.47s | But the idea is pretty good still we still want to do the same thing 2083.47s - 2087.63s | but we just need to find a string that will not get modified too much before it's 2088.31s - 2089.83s | Displayed and to do that 2089.83s - 2095.31s | We just have to look at the framework and go a little bit deeper look at many many functions up until we find a viable 2095.39s - 2098.25s | That gets displayed without being modified 2098.95s - 2103.87s | Sadly for us when it gets displayed it gets displayed without being modified 2103.91s - 2110.99s | It will not have a lot of codes in between the creation of the Bible and the display of the Bible 2110.99s - 2114.99s | so it limits the number of gadgets that we can use and 2115.59s - 2116.75s | well 2116.75s - 2121.19s | It's honestly pretty much how to make this work, but you have to think at 2121.83s - 2126.23s | Every line that you can use like every line in the code you can use


chunk_id: 207_chunk_42
chunk_text:
and new bytes 2077.95s - 2079.55s | Which is completely useless 2079.55s - 2083.47s | But the idea is pretty good still we still want to do the same thing 2083.47s - 2087.63s | but we just need to find a string that will not get modified too much before it's 2088.31s - 2089.83s | Displayed and to do that 2089.83s - 2095.31s | We just have to look at the framework and go a little bit deeper look at many many functions up until we find a viable 2095.39s - 2098.25s | That gets displayed without being modified 2098.95s - 2103.87s | Sadly for us when it gets displayed it gets displayed without being modified 2103.91s - 2110.99s | It will not have a lot of codes in between the creation of the Bible and the display of the Bible 2110.99s - 2114.99s | so it limits the number of gadgets that we can use and 2115.59s - 2116.75s | well 2116.75s - 2121.19s | It's honestly pretty much how to make this work, but you have to think at 2121.83s - 2126.23s | Every line that you can use like every line in the code you can use it to 2126.67s - 2132.27s | Go closer to your goal like every line can be an allocation or the allocation that would shape doing better for you 2132.27s - 2136.11s | And I actually managed for that off in I think five days 2136.11s - 2139.99s | It was really really long and I actually managed to get the leak 2139.99s - 2143.95s | So it was nice because afterwards it's pretty easy to get a C 2143.95s - 2147.87s | Once you have an address of some value in the PHP heap 2147.87s - 2154.35s | You can just reproduce the same exploit, but this time use your free list corruption to arbitrate to allocate at an arbitrary 2154.95s - 2161.23s | Position and that means that you can do that only attacks where you override some value that is in your session for instance 2161.27s - 2167.95s | Maybe you want to overwrite your goals and set them to admin or maybe you want to override serialized data before it's the serialized 2167.95s - 2170.11s | So that you have an arbitrary and serialized in PHP 2170.11s - 2174.79s | Or you can also go like the


chunk_id: 207_chunk_43
chunk_text:
it to 2126.67s - 2132.27s | Go closer to your goal like every line can be an allocation or the allocation that would shape doing better for you 2132.27s - 2136.11s | And I actually managed for that off in I think five days 2136.11s - 2139.99s | It was really really long and I actually managed to get the leak 2139.99s - 2143.95s | So it was nice because afterwards it's pretty easy to get a C 2143.95s - 2147.87s | Once you have an address of some value in the PHP heap 2147.87s - 2154.35s | You can just reproduce the same exploit, but this time use your free list corruption to arbitrate to allocate at an arbitrary 2154.95s - 2161.23s | Position and that means that you can do that only attacks where you override some value that is in your session for instance 2161.27s - 2167.95s | Maybe you want to overwrite your goals and set them to admin or maybe you want to override serialized data before it's the serialized 2167.95s - 2170.11s | So that you have an arbitrary and serialized in PHP 2170.11s - 2174.79s | Or you can also go like the standard way where you go for a binary attack 2174.87s - 2179.85s | Where you want to control a YP like you started binary and you want to go like full binary 2179.91s - 2185.15s | But I think the data only attack is more elegant and it fits more because you don't have to dump the binary 2185.15s - 2187.15s | So it's it's easier 2187.51s - 2192.03s | But like all of these that I'm saying it's actually only the visible part of the iceberg 2192.03s - 2196.23s | It's really really like hard to pull off because first you need a proper heap setup 2196.23s - 2197.67s | I haven't covered this part 2197.67s - 2202.63s | It's really hard to do because the only thing that you can use to do your heap setup is HTTP parameters 2202.63s - 2207.47s | But then the script gets compiled and you will use other scripts. They all get combined in the same heap 2207.47s - 2212.03s | So you will like completely mess up the heap. It's really annoying to pull off in addition to this 2213.03s - 2214.07s | Variable scope is here 2214.07s - 2219.95s |


chunk_id: 207_chunk_44
chunk_text:
standard way where you go for a binary attack 2174.87s - 2179.85s | Where you want to control a YP like you started binary and you want to go like full binary 2179.91s - 2185.15s | But I think the data only attack is more elegant and it fits more because you don't have to dump the binary 2185.15s - 2187.15s | So it's it's easier 2187.51s - 2192.03s | But like all of these that I'm saying it's actually only the visible part of the iceberg 2192.03s - 2196.23s | It's really really like hard to pull off because first you need a proper heap setup 2196.23s - 2197.67s | I haven't covered this part 2197.67s - 2202.63s | It's really hard to do because the only thing that you can use to do your heap setup is HTTP parameters 2202.63s - 2207.47s | But then the script gets compiled and you will use other scripts. They all get combined in the same heap 2207.47s - 2212.03s | So you will like completely mess up the heap. It's really annoying to pull off in addition to this 2213.03s - 2214.07s | Variable scope is here 2214.07s - 2219.95s | Like if you have a method that is called and then it exists the method every variable that is in the method is going to be 2219.95s - 2221.39s | freed so 2221.39s - 2223.47s | Like it will completely change the heap as well 2223.47s - 2231.35s | And also obviously it's very specific your attack to the server that you're targeting the application that you're targeting and also the settings 2231.35s - 2235.47s | Like I think the original exploit that I built it was for roundtube in French 2235.47s - 2241.55s | If I change the language to English it wouldn't work because the strings that I get allocated with error messages 2241.55s - 2246.95s | They wouldn't be the same and that would completely change the shape of the heap. So again, it's a huge pain to pull off 2246.95s - 2248.95s | So don't do it unless 2248.95s - 2250.71s | really necessary 2250.71s - 2252.71s | but it works and 2252.75s - 2254.75s | I will show you 2256.82s - 2258.82s | an exploit 2259.42s - 2266.80s | Again 2270.44s - 2272.44s | No, I need to find 2280.94s - 2282.94s | Okay, same


chunk_id: 207_chunk_45
chunk_text:
Like if you have a method that is called and then it exists the method every variable that is in the method is going to be 2219.95s - 2221.39s | freed so 2221.39s - 2223.47s | Like it will completely change the heap as well 2223.47s - 2231.35s | And also obviously it's very specific your attack to the server that you're targeting the application that you're targeting and also the settings 2231.35s - 2235.47s | Like I think the original exploit that I built it was for roundtube in French 2235.47s - 2241.55s | If I change the language to English it wouldn't work because the strings that I get allocated with error messages 2241.55s - 2246.95s | They wouldn't be the same and that would completely change the shape of the heap. So again, it's a huge pain to pull off 2246.95s - 2248.95s | So don't do it unless 2248.95s - 2250.71s | really necessary 2250.71s - 2252.71s | but it works and 2252.75s - 2254.75s | I will show you 2256.82s - 2258.82s | an exploit 2259.42s - 2266.80s | Again 2270.44s - 2272.44s | No, I need to find 2280.94s - 2282.94s | Okay, same layout 2283.58s - 2290.06s | you get a shell on the very bottom and exploits on top of this and the application on the left and 2298.06s - 2300.06s | Now I need to remove it again 2301.30s - 2304.06s | Each one of these this one. Nope 2305.66s - 2307.66s | Nope 2307.94s - 2313.54s | Yeah, okay a quick conclusion and maybe a few more words afterwards 2315.90s - 2323.26s | So the bug was really bad honestly it had like lots of preconditions and even the bug was not that good like a really bad 2323.26s - 2325.14s | overflow but 2325.14s - 2329.14s | Luckily for us PHP exists and we actually are able to 2329.62s - 2331.14s | do 2331.18s - 2332.26s | Decent things with it 2332.26s - 2338.42s | We have a new actor attack vector where we convert the favorite primitive into an RCE on any PHP version 2338.62s - 2344.66s | Against any target if you're a favorite primitive you have RCE now, it's pretty nice. And also you add 2345.46s - 2349.46s | application specific attacks such as the one that demonstrated on roundtube and 2350.22s - 2353.26s | However,


chunk_id: 207_chunk_46
chunk_text:
layout 2283.58s - 2290.06s | you get a shell on the very bottom and exploits on top of this and the application on the left and 2298.06s - 2300.06s | Now I need to remove it again 2301.30s - 2304.06s | Each one of these this one. Nope 2305.66s - 2307.66s | Nope 2307.94s - 2313.54s | Yeah, okay a quick conclusion and maybe a few more words afterwards 2315.90s - 2323.26s | So the bug was really bad honestly it had like lots of preconditions and even the bug was not that good like a really bad 2323.26s - 2325.14s | overflow but 2325.14s - 2329.14s | Luckily for us PHP exists and we actually are able to 2329.62s - 2331.14s | do 2331.18s - 2332.26s | Decent things with it 2332.26s - 2338.42s | We have a new actor attack vector where we convert the favorite primitive into an RCE on any PHP version 2338.62s - 2344.66s | Against any target if you're a favorite primitive you have RCE now, it's pretty nice. And also you add 2345.46s - 2349.46s | application specific attacks such as the one that demonstrated on roundtube and 2350.22s - 2353.26s | However, the bug is not PHP specific 2353.26s - 2358.74s | So there could be a lot of other like targets, but I couldn't find any but maybe you will you know 2358.74s - 2363.74s | and they might be discovered as time go by if people like tries to 2364.74s - 2368.78s | well try to find a way to explain the bug and 2370.42s - 2376.22s | The timeline will fast and I found the bug last year and I started exploiting it in February and 2376.54s - 2381.38s | After a month and a half I could report it to the GDP security team and they were like really amazing 2381.38s - 2383.42s | Like they were really fast after a week 2383.42s - 2387.54s | I got a patch and they were really nice and they knew what they were doing which is 2388.46s - 2391.58s | Well, it's not always the case to say the least and 2391.98s - 2396.38s | So the bug got patched in a week and two weeks after after the embargo 2396.38s - 2400.58s | it was released as CVE 2024 2961 and 2401.90s - 2404.54s | Yeah, that's probably maybe


chunk_id: 207_chunk_47
chunk_text:
the bug is not PHP specific 2353.26s - 2358.74s | So there could be a lot of other like targets, but I couldn't find any but maybe you will you know 2358.74s - 2363.74s | and they might be discovered as time go by if people like tries to 2364.74s - 2368.78s | well try to find a way to explain the bug and 2370.42s - 2376.22s | The timeline will fast and I found the bug last year and I started exploiting it in February and 2376.54s - 2381.38s | After a month and a half I could report it to the GDP security team and they were like really amazing 2381.38s - 2383.42s | Like they were really fast after a week 2383.42s - 2387.54s | I got a patch and they were really nice and they knew what they were doing which is 2388.46s - 2391.58s | Well, it's not always the case to say the least and 2391.98s - 2396.38s | So the bug got patched in a week and two weeks after after the embargo 2396.38s - 2400.58s | it was released as CVE 2024 2961 and 2401.90s - 2404.54s | Yeah, that's probably maybe the end of it for me 2404.54s - 2410.70s | but I have published lengthy blog posts about the bug because there's so much to say about the bugs and 2411.02s - 2416.06s | also the impact on the PHP ecosystem, which I couldn't cover here because we only have 45 minutes and 2416.38s - 2421.66s | Also, there are exploits that are available on our github and also there's my Twitter if you want to ask questions 2421.66s - 2425.10s | you can also have asked some questions like right after the talk and 2426.26s - 2429.06s | Just to flex a little bit a few what-ifs 2430.70s - 2434.22s | What if we have a favorite primitive, but we cannot see the output 2434.58s - 2438.62s | We have a failure contents, but no echo in front of it. So we cannot read for except maps 2438.74s - 2443.74s | We cannot read like any binary. So the expectation that I've shown you it doesn't work and 2444.30s - 2446.74s | Also in some very very rare cases 2446.74s - 2452.02s | they live in faith will not be present like you will not be able to decompress


chunk_id: 207_chunk_48
chunk_text:
the end of it for me 2404.54s - 2410.70s | but I have published lengthy blog posts about the bug because there's so much to say about the bugs and 2411.02s - 2416.06s | also the impact on the PHP ecosystem, which I couldn't cover here because we only have 45 minutes and 2416.38s - 2421.66s | Also, there are exploits that are available on our github and also there's my Twitter if you want to ask questions 2421.66s - 2425.10s | you can also have asked some questions like right after the talk and 2426.26s - 2429.06s | Just to flex a little bit a few what-ifs 2430.70s - 2434.22s | What if we have a favorite primitive, but we cannot see the output 2434.58s - 2438.62s | We have a failure contents, but no echo in front of it. So we cannot read for except maps 2438.74s - 2443.74s | We cannot read like any binary. So the expectation that I've shown you it doesn't work and 2444.30s - 2446.74s | Also in some very very rare cases 2446.74s - 2452.02s | they live in faith will not be present like you will not be able to decompress your stream so you will have to exploit with 2452.02s - 2454.02s | one single pocket and 2454.26s - 2455.78s | That looks impossible 2455.78s - 2460.98s | but I was able to do both at the same time that was actually my very first exploits and 2461.62s - 2463.62s | I will try and show you how 2465.38s - 2470.44s | It's just a demo really sped up because it's really slow 2471.04s - 2475.64s | Well at the end you get a shell the important part is on the left the source code 2475.64s - 2479.16s | You can see at the very bottom you have a failure contents without an echo or anything 2479.16s - 2484.78s | So I don't have the output and also on top of this. I have arbitrary allocation a random 2484.78s - 2490.68s | Sorry allocations and the allocations just to show that the script is not very that it's not tailored to attack one PHP script 2490.68s - 2497.04s | Like it could work against any PHP instance. And yeah, the exploit is not done yet. It's sped up like eight times 2497.04s - 2503.16s | I think it's really really


chunk_id: 207_chunk_49
chunk_text:
your stream so you will have to exploit with 2452.02s - 2454.02s | one single pocket and 2454.26s - 2455.78s | That looks impossible 2455.78s - 2460.98s | but I was able to do both at the same time that was actually my very first exploits and 2461.62s - 2463.62s | I will try and show you how 2465.38s - 2470.44s | It's just a demo really sped up because it's really slow 2471.04s - 2475.64s | Well at the end you get a shell the important part is on the left the source code 2475.64s - 2479.16s | You can see at the very bottom you have a failure contents without an echo or anything 2479.16s - 2484.78s | So I don't have the output and also on top of this. I have arbitrary allocation a random 2484.78s - 2490.68s | Sorry allocations and the allocations just to show that the script is not very that it's not tailored to attack one PHP script 2490.68s - 2497.04s | Like it could work against any PHP instance. And yeah, the exploit is not done yet. It's sped up like eight times 2497.04s - 2503.16s | I think it's really really slow, but you get one bytes per one byte and at the end you have another shell. So yeah, that's it 2510.16s - 2512.20s | Okay, I'm getting close. No 2512.88s - 2520.41s | There we go 2520.41s - 2529.88s | questions 2529.88s - 2531.88s | Okay, I guess we're good. Ah, there's one 2535.59s - 2537.59s | Yeah, thank you. This is amazing 2537.63s - 2544.15s | So, how did you get to the round cube target and establish that those conditions were present that you were looking for? 2544.87s - 2546.87s | so I 2546.87s - 2549.05s | Thought that like emails to me 2549.91s - 2552.71s | When you send an email you can kind of send the charset with it 2552.71s - 2558.51s | So I cannot felt like webmails would be a good target to look at and I looked at wrong cube 2558.51s - 2565.27s | And I saw that like it was a good target. So yeah, that's what oh cool pure intuition. That's amazing. Yeah 2565.99s - 2574.84s | Well, thank you for listening to my talk


chunk_id: 207_chunk_50
chunk_text:
slow, but you get one bytes per one byte and at the end you have another shell. So yeah, that's it 2510.16s - 2512.20s | Okay, I'm getting close. No 2512.88s - 2520.41s | There we go 2520.41s - 2529.88s | questions 2529.88s - 2531.88s | Okay, I guess we're good. Ah, there's one 2535.59s - 2537.59s | Yeah, thank you. This is amazing 2537.63s - 2544.15s | So, how did you get to the round cube target and establish that those conditions were present that you were looking for? 2544.87s - 2546.87s | so I 2546.87s - 2549.05s | Thought that like emails to me 2549.91s - 2552.71s | When you send an email you can kind of send the charset with it 2552.71s - 2558.51s | So I cannot felt like webmails would be a good target to look at and I looked at wrong cube 2558.51s - 2565.27s | And I saw that like it was a good target. So yeah, that's what oh cool pure intuition. That's amazing. Yeah 2565.99s - 2574.84s | Well, thank you for listening to my talk


chunk_id: 208_chunk_0
chunk_text:
{ "webpage_url": "https://www.youtube.com/watch?v=4lQ2GnmTFkY", "title": "DEF CON 32 - Leveraging private APNs for mobile network traffic analysis - Aapo Oksman", "description": "Knowing where and how your mobile and IoT devices communicate on the Internet is essential for ensuring privacy and security.\n\nIn the past, it has been easy to follow their communication through a WIFI connection that you control. However, your devices are becoming more locked down and utilize mobile networks such as 4G and 5G for communication. As the devices communicate directly through mobile network base stations operated by Internet Service Providers (ISPs), tampering with or even monitoring their communication is outside your reach.\n\nWhile it is possible to set up a private base station, it requires expensive components and is hard to operate. However, many ISPs have begun offering private Access Point Names (APNs) to allow you to have a private network inside the ISP infrastructure.\n\nThis talk will show how you can affordably leverage ISP-operated mobile networks and their private APN services to control your mobile devices' network traffic. This technique lets you inspect, filter, and tamper with your mobile devices' IP traffic for offensive and defensive cyber security needs, such as penetration testing IoT devices or monitoring mobile device endpoints for malicious traffic.", "channel_url": "https://www.youtube.com/channel/UC6Om9kAkl32dWlDSNlDS9Iw", "duration": 2486, "channel": "DEFCONConference", "uploader": "DEFCONConference", "upload_date": "20241016" } 0.00s - 8.48s | This text was transcribed using whisper model: large-v2 So my name is Aapo. I do a lot of things with IoT, but especially for my work 8.48s - 15.32s | security research, consulting, and mainly look at IoT and other kinds of devices. 15.32s - 20.96s | I work a lot on cryptography and network protocols. Outside of that, 20.96s - 25.88s | bug bounty. So if you run a hardware bug bounty program, you know where to find 25.88s - 36.02s | me, and I'm also a coach for a Finnish CTF team. But yeah, so here is some IoT 36.02s - 44.90s | and my trusty EPC, and I want to kind of see how it works. I might want to hack it 44.90s - 53.22s | or I might want to check out something about it. This particular device connects 53.22s - 58.98s | to the Internet with an Ethernet port or Wi-Fi. So that should be quite 58.98s - 64.02s | straightforward. If we want to know where it's connecting to, and that's a 64.02s - 71.98s |


