< Return to Video

36C3 - Das nützlich-unbedenklich Spektrum

  • 0:00 - 0:19
    36c3 Intro Music
  • 0:20 - 0:23
    Herald: ...now with the talk "The useful-
    harmless spectrum". As I said,
  • 0:23 - 0:27
    he needs no introduction: Fefe.
  • 0:27 - 0:30
    Applause
  • 0:30 - 0:32
    Tapping on the microphone
  • 0:37 - 0:40
    Fefe: Good morning, I am happy that there
    are so many people here.
  • 0:40 - 0:44
    Thankfully this is not Hall 1. That would
    be bad, with so many people.
  • 0:44 - 0:47
    I have to manage your expectations
    before I start,
  • 0:47 - 0:51
    I actually submitted a different talk
    last year about TCB-minimization,
  • 0:51 - 0:54
    which would have been a bit technical,
    about what you can do
  • 0:54 - 1:00
    as a programmer. It was not accepted,
    I don't know why - schedule was full.
  • 1:00 - 1:03
    I submitted it again this year,
    but I didn't want it to look
  • 1:03 - 1:06
    like I want to bother them, so I
    submitted another talk.
  • 1:06 - 1:11
    ...of course they accepted that one.
    Which meant, I had to
  • 1:11 - 1:13
    quickly prepare it now.
    Audience laughs
  • 1:13 - 1:19
    Well, the problem is, this is more of a
    thought process than a structured
  • 1:19 - 1:23
    presentation. I hope that it'll be
    helpful none the less. But it's
  • 1:23 - 1:28
    not as structured as my usual talks.
    I will just start. So, there are multiple
  • 1:28 - 1:32
    approaches, that basically result in
    the same result, and I will
  • 1:32 - 1:37
    just let you listen. Relatively early in
    my career, I decided the following:
  • 1:37 - 1:41
    I will never write software on which
    people's lives may depend,
  • 1:41 - 1:46
    like medical devices, nuclear reactors;
    that was my idea.
  • 1:46 - 1:51
    Of course not military either. And then
    I met somebody that writes code for
  • 1:51 - 1:54
    nuclear reactors. And it was the kind of
    guy that says "That's super easy"
  • 1:54 - 2:00
    So when those that know their
    limits don't do it, then
  • 2:00 - 2:04
    the other people will.
    Audience laughs
  • 2:05 - 2:09
    I don't want to generalize though.
    I also met another guy that
  • 2:09 - 2:12
    was not like this, but I mean,
    this type of person exist.
  • 2:12 - 2:18
    I believe that the problem here
    is that you learn programming
  • 2:18 - 2:23
    exploratively: It's not like a set path,
    on which you walk, but rather you
  • 2:23 - 2:29
    are just walking around and finding
    your limits. But by definition this also
  • 2:29 - 2:33
    means, that you don't know your limits
    yet, because you are looking for them.
  • 2:33 - 2:38
    This also means that you are always
    working at your limit though. When people
  • 2:38 - 2:41
    write software, then they go
    just as far as they believe they
  • 2:41 - 2:47
    can just barely go. In turn, this also
    means that the technology that
  • 2:47 - 2:51
    is being rolled out out there is mainly
    not tried and tested
  • 2:51 - 2:55
    or well understood, but rather it is the
    technology, that the programmer
  • 2:55 - 3:01
    just barely still understood. This is a
    bit of a problem, which is further
  • 3:01 - 3:05
    amplified by today's modularization and
    dependency wave, where
  • 3:05 - 3:09
    people just pull in modules from elsewhere
  • 3:09 - 3:17
    and just assume that the writer of that
    module must know what they are doing,
  • 3:17 - 3:21
    though without any foundation in reality.
    And it is often not the case. Instead,
  • 3:21 - 3:25
    they are people like you and me, that
    also worked exploratively.
  • 3:25 - 3:30
    You can also do a little thought
    experiment and get to this
  • 3:30 - 3:34
    conclusion yourself; you could even
    observe it happening. Let's assume
  • 3:34 - 3:38
    that somebody finds a better way to
    deal with complexity. For example
  • 3:38 - 3:41
    modularization, or object-oriented
    programming, when this was new.
  • 3:41 - 3:45
    So then you would hope that we would
    improve the software that we
  • 3:45 - 3:48
    had written before, because we now
    have it more under control.
  • 3:48 - 3:51
    But this does not happen.
    Instead, we now write bigger
  • 3:51 - 3:57
    software and work at our limit
    again. I think this is not
  • 3:57 - 4:00
    a problem of software development or
    programming, but generally
  • 4:00 - 4:04
    a problem of humans. Evolution
    made us this way, and we have to
  • 4:04 - 4:08
    learn to deal with it. Let me illustrate
    this: I have a theory,
  • 4:08 - 4:15
    which I call the gradient-theory. The
    thesis is, that humans treat their
  • 4:15 - 4:18
    environment like a process of optimization
    in mathematics. This means you
  • 4:18 - 4:23
    have a terrain and you are looking for
    the highest or lowest point - that is an
  • 4:23 - 4:29
    optimization problem. And you can't
    directly aim for it, because you don't
  • 4:29 - 4:34
    know the terrain. Instead, you have to
    make assumptions, and you can observe
  • 4:34 - 4:37
    this on yourself. If it's too cold, then
    you go to the radiator and
  • 4:37 - 4:42
    you don't set it to the perfect heat,
    you set it to "hot", then you wait
  • 4:42 - 4:44
    until it's too hot, then you
    turn it down again.
  • 4:44 - 4:48
    So we interact with our environment in
    a process of approximation.
  • 4:48 - 4:50
    And not just with heaters, but also when
    driving a car, when we have a map.
  • 4:50 - 4:54
    We look, "where is the limit? Where do
    we have to turn?", and
  • 4:54 - 4:59
    we ignore the journey to the turn,
    even if it is nice.
  • 4:59 - 5:03
    Many things that we do, also including
    our choice of speed, is such a gradient.
  • 5:03 - 5:06
    We accelerate until we feel unwell,
    then we slow down again.
  • 5:06 - 5:11
    Or when searching for something in
    a telephone book or dictionary,
  • 5:11 - 5:16
    we make an assumption of where
    it will be. And when it is
  • 5:16 - 5:19
    too far, we go back again. The essence
    of it is: We make an assumption
  • 5:19 - 5:23
    about what the terrain looks like.
    We have smooth transitions here,
  • 5:23 - 5:26
    so this technique works well.
    This is called gradient descent
  • 5:26 - 5:30
    by the way, when you try to follow
    gravity to find the lowest point.
  • 5:30 - 5:34
    But it does not work well
    in two scenarios:
  • 5:34 - 5:38
    Firstly, when there is a cliff where I
    can't go back once I have walked
  • 5:38 - 5:42
    over it. It also doesn't go well when
    you don't notice that you have gone
  • 5:42 - 5:46
    too far. Well it is similar to the cliff,
    and the second problem is
  • 5:46 - 5:50
    when you can't roll back
    for other reasons.
  • 5:50 - 5:54
    This happens frequently in software
    development, and it turns out, that
  • 5:54 - 5:58
    this is exactly the kind of problem that
    human have. For example,
  • 5:58 - 6:03
    when we have a trial subscription for two
    weeks, people forget to cancel it again,
  • 6:04 - 6:10
    or drug addiction is a classic, or
    gambling addiction. And in software
  • 6:10 - 6:12
    development or project management
    in general this is common:
  • 6:12 - 6:17
    We have already invested so much that
    we can't go back. Security is not
  • 6:17 - 6:22
    a gradient. It may look like one, but it
    isn't. I think this is
  • 6:22 - 6:27
    a fundamental issue in IT security.
    You don't notice when you
  • 6:27 - 6:31
    have gone too far. You only notice
    when you get hacked. And then
  • 6:31 - 6:35
    you can no longer go back, all the data
    is already gone. Complexity is also
  • 6:35 - 6:38
    not a gradient, similarly to security,
    but it feels like one. I think
  • 6:38 - 6:42
    this is the reason why we deal with
    it so badly. It feels
  • 6:42 - 6:45
    as if we have everything under
    control. And when we notice,
  • 6:45 - 6:50
    that we don't, we can't go back.
    By the way, giving out data to
  • 6:50 - 6:55
    facebook is also such a "pseudo-gradient".
  • 6:55 - 7:01
    When you notice that you gave away too
    much, it is too late.
  • 7:01 - 7:06
    So the conclusion is:
    Complexity is evil. We notice it too
  • 7:06 - 7:10
    late and we get into it too easily.
    So we have to counteract that somehow.
  • 7:10 - 7:15
    If this is our job, we are externalizing
    the costs to our customers,
  • 7:15 - 7:19
    to our users, and to our future self.
  • 7:19 - 7:25
    This is why you rarely find older software
    developers that are happy.
  • 7:25 - 7:29
    Audience laughs
    So, this was the first train of thought,
  • 7:29 - 7:33
    that led me in this direction. The second
    train of thought: Let me just show you
  • 7:33 - 7:36
    the GNU manifesto, as a representative.
    This is not GNU-bashing,
  • 7:36 - 7:39
    but you can show this pretty well with
    the example of the GNU manifesto.
  • 7:39 - 7:44
    This is the original announcement of the
    GNU project by Richard Stallman. He wrote:
  • 7:44 - 7:48
    "GNU will be able to run Unix programs, but
    will not be identical to Unix. We will make
  • 7:48 - 7:53
    all improvements that are convenient".
    This is a very bad sentence.
  • 7:53 - 7:58
    What does "convenient" mean? For who?
  • 7:58 - 8:03
    But this is the approach that a lot of
    programmers have:
  • 8:03 - 8:07
    "Oh we can just add this quickly."
    We are lacking a corrective, that
  • 8:07 - 8:11
    we think in advance "what legacy am I
    hanging to my leg right now?"
  • 8:11 - 8:16
    I think this "convenience" thought when
    extending software is our "original sin"
  • 8:16 - 8:20
    - to get a bit catholic here -
    in software development.
  • 8:20 - 8:24
    Everyone has done it before, and you
    just can't correct it after the fact.
  • 8:24 - 8:27
    So the only way of getting rid of it
    is to throw away
  • 8:27 - 8:32
    the whole software or module and
    start over again. But software doesn't die.
  • 8:32 - 8:37
    Only when dealing with software, I learned
    that it is good that people die,
  • 8:37 - 8:41
    because it is a corrective that is needed.
    If a system is supposed to improve,
  • 8:41 - 8:44
    the old stuff has to be able to die at
    some point. And this does not
  • 8:44 - 8:50
    happen with software. It is a feature
    that things don't last forever.
  • 8:50 - 8:55
    In general, you can observe that when
    somebody is extending their software and
  • 8:55 - 8:58
    they have a choice between "We do
    something to solve our specific problem"
  • 8:58 - 9:02
    or "We do something to solve a more
    general problem", people will
  • 9:02 - 9:07
    always try to solve the
    more general problem.
  • 9:07 - 9:12
    "The more danger, the more honor."
    And you can see this across the board.
  • 9:12 - 9:17
    There are very few exceptions to this. And
    I had my "aha-moment" when I opened
  • 9:17 - 9:21
    'gdb' on a project one day. I took '/tmp'
    here, but that project was
  • 9:21 - 9:26
    some checkout.
    In my webserver, I have a '.gdbinit' file.
  • 9:26 - 9:31
    It's a configuration file for the GNU-
    debugger, where you can for example say
  • 9:31 - 9:33
    "Open this application that I want to
  • 9:33 - 9:37
    debug with these arguments!"
    And in there, I write "Don't use Port 80,
  • 9:37 - 9:41
    that doesn't work, instead use port
    8005" or something, to debug it on
  • 9:41 - 9:46
    localhost. And one day, gdb started
    saying "no, I don't accept this
  • 9:46 - 9:51
    .gdbinit file because it is in a directory
  • 9:51 - 9:56
    that you have not specifically allowed."
    This was exactly such an attempt to fix
  • 9:56 - 10:01
    an issue after shipping, after the fact.
    gdb noticed: "Our config-file has become
  • 10:01 - 10:06
    so powerful, that it is a security issue",
  • 10:06 - 10:11
    and then retroactively nailed down the
    whole config. And this broke more
  • 10:11 - 10:16
    than it needed to - perhaps, I don't
    know for sure - but it was very annoying
  • 10:16 - 10:19
    for me. You can put an auto path in here,
    but that is when I noticed it
  • 10:19 - 10:22
    for the first time. This was a few years
  • 10:22 - 10:26
    ago. I don't know, when exactly that was.
    There was a similar case like this
  • 10:26 - 10:30
    again: With Vim, the editor, that I like
    to use. You can do things like
  • 10:30 - 10:34
    in a comment in the file that is being
    edited, you can put some configuration
  • 10:34 - 10:37
    settings in the first or last three lines.
  • 10:37 - 10:42
    It is supposed to be used for "I use
    tabstop=4 here", or something.
  • 10:42 - 10:46
    But the parser for this had
    a security bug, which made it
  • 10:46 - 10:51
    possible to create a file that
    executes code, when it is
  • 10:51 - 10:56
    opened in vim, which was of course
    not intended. But it is the same
  • 10:56 - 11:00
    issue. I think you can generalize this
  • 11:00 - 11:03
    a bit - though earlier I argued
    against generalizations, but
  • 11:03 - 11:07
    in analysis it is good, in software
    it is usually bad. let me illustrate
  • 11:07 - 11:11
    with an example:
    Let's assume that we have a CSV file
  • 11:11 - 11:16
    with some trouble tickets. Field 4
    is the one, that we are interested in.
  • 11:16 - 11:22
    Let's assume it looks like this. It's CSV.
    So, now I would like to have the sum
  • 11:22 - 11:26
    of the four fields. So first I use
    cut, we are in Unix here.
  • 11:26 - 11:31
    Then the first line has to go,
  • 11:31 - 11:34
    so I use tail. Now the first line
    is gone, now I just have to
  • 11:34 - 11:38
    calculate the sum. There is an
    application for this too: paste. that is
  • 11:38 - 11:43
    how you do it in Unix. Then I have to
    calculate it. There we go! But what if
  • 11:43 - 11:49
    it doesn't say 1 here, but instead "fred"?
    We notice: cut does not have a problem,
  • 11:49 - 11:54
    tail does not have a problem, paste is
    fine, but bc falls on its face.
  • 11:54 - 12:02
    Even worse, bc is programmable.
    There could be the
  • 12:02 - 12:05
    Ackermann-function here and
    your computer would be gone
  • 12:05 - 12:10
    for an hour, while it is trying to
    solve some recursion. And I think it
  • 12:10 - 12:15
    is useful to introduce a concept here
    to say: cut, tail and paste are harmless,
  • 12:15 - 12:19
    bc is not. This is one of the thoughts
    where I thought "okay, you can make
  • 12:19 - 12:22
    a talk about this".
    But this is not enough.
  • 12:22 - 12:27
    There are different kinds of harmless.
    But I think this simple idea
  • 12:27 - 12:31
    already helps us a bit.
    Let's make it into a sentence:
  • 12:31 - 12:35
    Software is harmless, when unexpected
    input don't produce unexpected
  • 12:35 - 12:39
    behavior or unexpected kinds of output.
    For example, an SHA-checksum is always
  • 12:39 - 12:43
    harmless. Regardless of
    what data I put in, the output
  • 12:43 - 12:48
    has a known format. Or word
    count (wc) is also one of those.
  • 12:48 - 12:52
    Now you could say: "Okay, just use
    awk!" And in awk I don't have a problem
  • 12:52 - 12:56
    when it says "fred" instead of "4"
    and the interpreter also does not
  • 12:56 - 13:01
    interpret any functions.
    It looks better, but
  • 13:01 - 13:05
    is it really harmless?
    It turns out, awk is a different kind of
  • 13:05 - 13:09
    not harmless, because you can write
    in the filesystem with it. So I don't have
  • 13:09 - 13:14
    to worry about the input, but I have to
    worry about the code, that I hand to it
  • 13:14 - 13:17
    on the command line. So that is
    another distinction you can make.
  • 13:17 - 13:22
    This is a big problem in the game
    industry by the way:
  • 13:22 - 13:26
    The game development industry
    has started putting interpreters
  • 13:26 - 13:31
    into their games, to be able to write
    their business logic - not the AI,
  • 13:31 - 13:37
    but small scripts - in a scripting
    language. One of the most
  • 13:37 - 13:41
    popular script-interpreters for this
    purpose is Lua. And Lua is primarily
  • 13:41 - 13:45
    used because it can't do anything,
    if you don't specifically allow it.
  • 13:45 - 13:49
    So It can't open files or sockets.
    You can enable this manually though,
  • 13:49 - 13:53
    and then you have a problem again
    of course. But this is a real issue.
  • 13:53 - 13:57
    Many open-source people don't think
    about this, because they think "Well,
  • 13:57 - 14:00
    I will ship it and the rest is no longer
    my issue." But I think,
  • 14:00 - 14:03
    that we generally have to think
    about this, and preferably
  • 14:03 - 14:07
    before shipping, optimally already while
    programming. So, this is
  • 14:07 - 14:11
    a different kind of harmlessness.
    The first kind was "Can bad input
  • 14:11 - 14:15
    cause bad output?" And now: "Can the
    application itself do bad things?"
  • 14:15 - 14:19
    This is a very modern thought,
    because we work a lot more with
  • 14:19 - 14:24
    sandboxing today. In sandboxing, the goal
    is to prevent a program from
  • 14:24 - 14:28
    accidentally or deliberately doing bad
    things. And there are again different
  • 14:28 - 14:33
    things that a program can do.
    bc can eat processing time. awk can
  • 14:33 - 14:37
    read and write in your filesystem, and
    this goes on and on. Let's get back
  • 14:37 - 14:42
    to the GNU manifesto: GNU awk is a special
    version of awk and it can open sockets,
  • 14:42 - 14:46
    without any need. This means, if we
    just use awk and thing "Well, awk can
  • 14:46 - 14:49
    write in the filesystem, but I mounted
    that read-only, so nothing
  • 14:49 - 14:53
    can happen". But then if GNU awk
    is being used, it is suddenly
  • 14:53 - 14:58
    no longer harmless. Bash
    can open sockets too by the way!
  • 14:58 - 15:03
    I don't know, how many people knew that?
    This goes on of course: after awk
  • 15:03 - 15:06
    came Perl. It's even worse, and
    Perl can do eval(), which in my
  • 15:06 - 15:11
    opinion is the worse evil that you can
    have in a programming language.
  • 15:11 - 15:16
    A bit closer to the end-user you can also
    observe this in browsers. Let's look at
  • 15:16 - 15:21
    Netscape for example:
    Several times, Netscape had the choice
  • 15:21 - 15:25
    between "useful" and "harmless" and always
    chose "useful". It started with
  • 15:25 - 15:29
    the plugins. I don't know, who
    of you still remembers the Flash-plugin,
  • 15:29 - 15:34
    or before that we all had the RealPlayer,
    and there was also an Acrobat-plugin -
  • 15:34 - 15:38
    And all of it was shit, because the
    plugins were native code: they could do
  • 15:38 - 15:42
    everything, that their operating system
    allowed. This means that it was very
  • 15:42 - 15:46
    useful, but also very dangerous.
    And it was a conscious choice of
  • 15:46 - 15:50
    the browsers, to allow this.
    The actual goal of this talk is
  • 15:50 - 15:54
    to give the programmers among you a
    bit of awareness that you don't just
  • 15:54 - 15:59
    add a plugin interface that
    can do everything.
  • 15:59 - 16:05
    The next iteration was:
    We'll do everything in JavaScript.
  • 16:05 - 16:10
    At first it looked better, but this
    JavaScript eventually also ran with
  • 16:10 - 16:14
    enough privileges do do bad things
    in the system, or at least in the browser.
  • 16:14 - 16:18
    It turns out: People now have their
    important data in the browser,
  • 16:18 - 16:21
    because they do online banking. And
    that is enough do do a lot of damage.
  • 16:21 - 16:26
    Then they had to correct it
    after the fact. Chrome now imposes
  • 16:26 - 16:29
    even further limits for security reasons
    to break ad blockers. It's always
  • 16:29 - 16:33
    the same trap that we walk into.
    Who of you here use Windows?
  • 16:33 - 16:37
    In Windows there is a tool by
    Mark Russinovich - by now he has
  • 16:37 - 16:41
    sold it to Microsoft, so it is now an
    official Microsoft tool.
  • 16:41 - 16:45
    And the only functionality of this
    tool is to list the different
  • 16:45 - 16:48
    plugins that are part of the system.
    And I took a relatively
  • 16:48 - 16:52
    clean system here. It's not about
    this down here or
  • 16:52 - 16:57
    the size of the scrollbar, but just
    how many tabs there are at the top:
  • 16:57 - 17:01
    These are all different options for
    plugins to integrate into the system,
  • 17:01 - 17:04
    and nobody has an overview of this
    anymore, because people always decided
  • 17:04 - 17:09
    to go in the wrong direction. I believe
    that this is a core problem.
  • 17:09 - 17:14
    There is a third approach to this:
    My daily life in security consists of
  • 17:14 - 17:18
    going to companies. They show me their
    source code and I look for bugs. Then
  • 17:18 - 17:22
    I tell them, which bugs I found. And
    occasionally, there are cases where
  • 17:22 - 17:26
    I notice that there are a lot of bugs.
    Not just those that I find, but they
  • 17:26 - 17:30
    already have their own database,
    a bugtracker, and they already
  • 17:30 - 17:35
    have a seven-digit number of bugs. Yes,
    This happens. And since it is a problem
  • 17:35 - 17:39
    that we have so many bugs, there
    are now counter-strategies by developers
  • 17:39 - 17:43
    that start saying: "Okay, if this bug is
    not important then
  • 17:43 - 17:47
    I can fix it later." And "later" means
    "never" in reality. It just sits there.
  • 17:47 - 17:52
    Joke that only makes sense in German
  • 17:52 - 17:58
    In the real world, bug
    trackers are often just
  • 17:58 - 18:04
    massive permanent data disposal sites:
    For example, I recently filed a bug report
  • 18:04 - 18:08
    for Firefox and got the ID 1590000.
    This is already a bad sign.
  • 18:08 - 18:12
    But it is also a good sign, that
    the bug tracker is open.
  • 18:12 - 18:16
    For Microsoft you can't see how
    many bugs they have.
  • 18:16 - 18:20
    This is only meant for illustration.
    Mozilla is not especially bad.
  • 18:20 - 18:23
    Mozilla just has an open tracker,
    on which I can show it well.
  • 18:23 - 18:27
    What I wanted to show you -
    I had a look: "What is the first bug
  • 18:27 - 18:31
    that I filed there?" It still had
    a six-digit ID.
  • 18:31 - 18:38
    That was 2003. If you look at the
    history of bug IDs then you notice:
  • 18:38 - 18:43
    It is growing exponentially.
    And it's not like the bugs somehow
  • 18:43 - 18:48
    go away at some point.
    I have noticed two major events,
  • 18:48 - 18:52
    where bugs are closed:
    When a new release is done
  • 18:52 - 18:56
    and you throw out the old JavaScript
    engine and put in a new one.
  • 18:56 - 19:00
    Then you just close all bugs of the old
    engine. It looks as if you have achieved
  • 19:00 - 19:04
    something. And the second is this one:
    I don't know, can you read this in
  • 19:04 - 19:07
    the back? Mozilla just closed my bug.
    It says:
  • 19:07 - 19:10
    "This bug has been automatically
    resolved after a period
  • 19:10 - 19:14
    of inactivity". Mind you, it was not me
    who was inactive. I filed the bug and
  • 19:14 - 19:18
    nobody at Mozilla took care of it.
    So they just automatically closed it,
  • 19:18 - 19:21
    because the statistics look so bad.
    This is a big issue,
  • 19:21 - 19:24
    not just at Mozilla. As I said, this is
    just the example
  • 19:24 - 19:28
    that I can show, because
    in their case it is public. But
  • 19:28 - 19:32
    this leads to a cascade of action
    and reaction. For example,
  • 19:32 - 19:36
    unimportant bugs are just not fixed
    anymore. And then people
  • 19:36 - 19:39
    add "important" on their bugs,
    because they want them to be fixed.
  • 19:39 - 19:43
    Then they say "Okay, the important
    bugs also don't get fixed,
  • 19:43 - 19:47
    because there are too many of them."
    And then people
  • 19:47 - 19:51
    write "Security" on their bugs, and now
    we have a wave of security-bugs.
  • 19:51 - 19:56
    There they negotiate: "Is this really
    a problem?" And then we get excuses
  • 19:56 - 20:01
    like "It's just a crash."
    The point is that there is an unholy
  • 20:01 - 20:08
    alliance with another trend,
    namely that companies see:
  • 20:08 - 20:11
    We have so many bugs open that
    solving the bugs is not the goal anymore.
  • 20:11 - 20:15
    There are just too many, it is
    unrealistic. Instead,
  • 20:15 - 20:20
    we introduce metrics like "we do
    fuzzing". Fuzzing is not
  • 20:20 - 20:24
    a bad idea, but it is not "finding all
    bugs", but just the first step
  • 20:24 - 20:28
    on a long road. But it gives
    out a nice metric.
  • 20:28 - 20:33
    We have so-and-so many fuzz-
    testcases, and now...
  • 20:33 - 20:37
    Are we now better or worse than
    before? It's hard to say.
  • 20:37 - 20:42
  • 20:42 - 20:47
  • 20:47 - 20:52
  • 20:52 - 20:55
  • 20:55 - 20:58
  • 20:58 - 21:02
  • 21:02 - 21:06
  • 21:06 - 21:10
  • 21:10 - 21:14
  • 21:14 - 21:18
  • 21:18 - 21:20
  • 21:20 - 21:23
  • 21:23 - 21:29
  • 21:29 - 21:34
  • 21:34 - 21:37
  • 21:37 - 21:42
  • 21:42 - 21:48
  • 21:48 - 21:52
  • 21:52 - 21:55
  • 21:55 - 21:59
  • 21:59 - 22:03
  • 22:03 - 22:08
  • 22:08 - 22:13
  • 22:13 - 22:17
  • 22:17 - 22:22
  • 22:22 - 22:26
  • 22:26 - 22:30
  • 22:30 - 22:34
  • 22:34 - 22:37
  • 22:37 - 22:41
  • 22:41 - 22:45
  • 22:45 - 22:49
  • 22:49 - 22:52
  • 22:52 - 22:56
  • 22:56 - 23:01
  • 23:01 - 23:04
  • 23:04 - 23:08
  • 23:08 - 23:12
  • 23:12 - 23:16
  • 23:16 - 23:20
  • 23:20 - 23:24
  • 23:24 - 23:28
  • 23:28 - 23:31
  • 23:31 - 23:36
  • 23:36 - 23:41
  • 23:41 - 23:45
  • 23:45 - 23:49
  • 23:49 - 23:53
  • 23:53 - 23:58
  • 23:58 - 24:04
  • 24:04 - 24:10
  • 24:10 - 24:14
  • 24:14 - 24:17
  • 24:17 - 24:21
  • 24:21 - 24:25
  • 24:25 - 24:29
  • 24:29 - 24:33
  • 24:33 - 24:38
  • 24:38 - 24:43
  • 24:43 - 24:48
  • 24:48 - 24:52
  • 24:52 - 24:56
  • 24:56 - 25:00
  • 25:00 - 25:04
  • 25:04 - 25:09
  • 25:09 - 25:13
  • 25:13 - 25:17
  • 25:17 - 25:20
  • 25:20 - 25:24
  • 25:24 - 25:28
  • 25:28 - 25:32
  • 25:32 - 25:35
  • 25:35 - 25:39
  • 25:39 - 25:44
  • 25:44 - 25:49
  • 25:49 - 25:53
  • 25:53 - 25:57
  • 25:57 - 26:03
  • 26:03 - 26:08
  • 26:08 - 26:13
  • 26:13 - 26:17
  • 26:17 - 26:20
  • 26:20 - 26:23
  • 26:23 - 26:27
  • 26:27 - 26:31
  • 26:31 - 26:35
  • 26:35 - 26:39
  • 26:39 - 26:42
  • 26:42 - 26:46
  • 26:46 - 26:49
  • 26:49 - 26:53
  • 26:53 - 26:57
  • 26:57 - 27:01
  • 27:01 - 27:04
  • 27:04 - 27:06
  • 27:06 - 27:10
  • 27:10 - 27:13
  • 27:14 - 27:17
  • 27:17 - 27:22
  • 27:22 - 27:27
  • 27:27 - 27:30
  • 27:30 - 27:33
  • 27:33 - 27:37
  • 27:37 - 27:41
  • 27:41 - 27:46
  • 27:46 - 27:50
  • 27:50 - 27:53
  • 27:53 - 27:57
  • 27:57 - 28:01
  • 28:01 - 28:06
  • 28:06 - 28:10
  • 28:10 - 28:14
  • 28:14 - 28:20
  • 28:20 - 28:24
  • 28:24 - 28:29
  • 28:29 - 28:33
  • 28:33 - 28:38
  • 28:38 - 28:43
  • 28:43 - 28:47
  • 28:47 - 28:51
  • 28:51 - 28:54
  • 28:54 - 28:59
  • 28:59 - 29:04
  • 29:04 - 29:08
  • 29:08 - 29:11
  • 29:11 - 29:14
  • 29:14 - 29:18
  • 29:18 - 29:22
  • 29:22 - 29:26
  • 29:26 - 29:30
  • 29:30 - 29:34
  • 29:34 - 29:37
  • 29:37 - 29:41
  • 29:41 - 29:45
  • 29:45 - 29:49
  • 29:49 - 29:53
  • 29:53 - 29:58
  • 29:58 - 30:03
  • 30:03 - 30:07
  • 30:07 - 30:11
  • 30:11 - 30:16
  • 30:16 - 30:20
  • 30:20 - 30:25
  • 30:25 - 30:29
  • 30:29 - 30:33
  • 30:33 - 30:39
  • 30:39 - 30:43
  • 30:43 - 30:50
  • 30:50 - 30:55
  • 30:55 - 31:00
  • 31:00 - 31:05
  • 31:05 - 31:08
  • 31:08 - 31:12
  • 31:12 - 31:18
  • 31:18 - 31:24
  • 31:24 - 31:30
  • 31:30 - 31:37
  • 31:37 - 31:42
  • 31:42 - 31:46
  • 31:46 - 31:50
  • 31:50 - 31:53
  • 31:53 - 31:57
  • 31:57 - 32:01
  • 32:01 - 32:05
  • 32:05 - 32:09
  • 32:09 - 32:13
  • 32:13 - 32:17
  • 32:17 - 32:22
  • 32:22 - 32:25
  • 32:25 - 32:29
  • 32:29 - 32:34
  • 32:34 - 32:39
  • 32:39 - 32:45
  • 32:45 - 32:49
  • 32:49 - 32:53
  • 32:53 - 32:56
  • 32:56 - 32:59
  • 32:59 - 33:03
  • 33:03 - 33:09
  • 33:09 - 33:14
  • 33:14 - 33:18
  • 33:18 - 33:22
  • 33:22 - 33:27
  • 33:27 - 33:32
  • 33:32 - 33:37
  • 33:37 - 33:42
  • 33:42 - 33:47
  • 33:47 - 33:52
  • 33:52 - 33:57
  • 33:57 - 34:02
  • 34:02 - 34:05
  • 34:05 - 34:10
  • 34:10 - 34:15
  • 34:15 - 34:20
  • 34:20 - 34:26
  • 34:26 - 34:30
  • 34:30 - 34:35
  • 34:35 - 34:39
  • 34:39 - 34:44
  • 34:44 - 34:49
  • 34:49 - 34:54
  • 34:54 - 34:59
  • 34:59 - 35:03
  • 35:03 - 35:07
  • 35:07 - 35:12
  • 35:12 - 35:17
  • 35:17 - 35:22
  • 35:22 - 35:26
  • 35:26 - 35:30
  • 35:30 - 35:34
  • 35:34 - 35:39
  • 35:39 - 35:45
  • 35:45 - 35:50
  • 35:50 - 35:55
  • 35:55 - 36:00
  • 36:00 - 36:04
  • 36:04 - 36:08
  • 36:08 - 36:12
  • 36:12 - 36:17
  • 36:17 - 36:22
  • 36:22 - 36:26
  • 36:26 - 36:31
  • 36:31 - 36:34
  • 36:34 - 36:38
  • 36:38 - 36:42
  • 36:42 - 36:47
  • 36:47 - 36:53
  • 36:53 - 36:59
  • 36:59 - 37:05
  • 37:05 - 37:09
  • 37:09 - 37:12
  • 37:12 - 37:16
  • 37:16 - 37:19
  • 37:19 - 37:23
  • 37:23 - 37:27
  • 37:27 - 37:31
  • 37:31 - 37:35
  • 37:35 - 37:39
  • 37:39 - 37:43
  • 37:43 - 37:47
  • 37:47 - 37:52
  • 37:52 - 37:56
  • 37:56 - 37:59
  • 37:59 - 38:03
  • 38:03 - 38:06
  • 38:06 - 38:11
  • 38:11 - 38:15
  • 38:15 - 38:20
  • 38:20 - 38:25
  • 38:25 - 38:29
  • 38:29 - 38:33
  • 38:33 - 38:36
  • 38:36 - 38:41
  • 38:41 - 38:46
  • 38:46 - 38:50
  • 38:50 - 38:55
  • 38:55 - 39:01
  • 39:01 - 39:05
  • 39:05 - 39:07
  • 39:07 - 39:11
  • 39:11 - 39:16
  • 39:16 - 39:20
  • 39:20 - 39:25
  • 39:25 - 39:29
  • 39:29 - 39:33
  • 39:33 - 39:37
  • 39:37 - 39:40
  • 39:40 - 39:43
  • 39:43 - 39:46
  • 39:46 - 39:52
  • 39:52 - 39:57
  • 39:57 - 40:00
  • 40:00 - 40:04
  • 40:04 - 40:08
  • 40:08 - 40:12
  • 40:12 - 40:16
  • 40:16 - 40:19
  • 40:19 - 40:23
  • 40:23 - 40:27
  • 40:27 - 40:32
  • 40:32 - 40:36
  • 40:36 - 40:41
  • 40:41 - 40:46
  • 40:46 - 40:50
  • 40:50 - 40:54
  • 40:54 - 40:58
  • 40:58 - 41:03
  • 41:03 - 41:06
  • 41:06 - 41:11
  • 41:11 - 41:14
  • 41:14 - 41:20
  • 41:20 - 41:23
  • 41:23 - 41:29
  • 41:29 - 41:32
  • 41:32 - 41:40
  • 41:40 - 41:44
  • 41:44 - 41:48
  • 41:49 - 41:55
  • 41:55 - 42:01
  • 42:01 - 42:05
  • 42:05 - 42:08
  • 42:08 - 42:12
  • 42:12 - 42:16
  • 42:16 - 42:19
  • 42:19 - 42:26
  • 42:26 - 42:29
  • 42:29 - 42:33
  • 42:33 - 42:39
  • 42:39 - 42:42
  • 42:42 - 42:45
  • 42:45 - 42:48
  • 42:48 - 42:52
  • 42:52 - 42:55
  • 42:55 - 42:58
  • 42:58 - 43:06
  • 43:06 - 43:09
  • 43:09 - 43:13
  • 43:13 - 43:18
  • 43:18 - 43:23
  • 43:23 - 43:27
  • 43:27 - 43:32
  • 43:32 - 43:35
  • 43:35 - 43:40
  • 43:40 - 43:43
  • 43:43 - 43:48
  • 43:48 - 43:52
  • 43:52 - 43:55
  • 43:55 - 43:59
  • 43:59 - 44:02
  • 44:02 - 44:08
  • 44:08 - 44:13
  • 44:13 - 44:18
  • 44:18 - 44:22
  • 44:22 - 44:28
  • 44:28 - 44:31
  • 44:31 - 44:35
  • 44:35 - 44:39
  • 44:39 - 44:42
  • 44:42 - 44:44
  • 44:44 - 44:48
  • 44:48 - 44:54
  • 44:54 - 44:56
  • 44:56 - 45:00
  • 45:00 - 45:03
  • 45:03 - 45:08
  • 45:08 - 45:12
  • 45:12 - 45:16
  • 45:16 - 45:22
  • 45:22 - 45:27
  • 45:27 - 45:30
  • 45:30 - 45:34
  • 45:34 - 45:37
  • 45:37 - 45:41
  • 45:41 - 45:52
  • 45:52 - 45:54
  • 45:54 - 46:00
  • 46:00 - 46:05
  • 46:05 - 46:09
  • 46:09 - 46:13
  • 46:13 - 46:19
  • 46:19 - 46:22
  • 46:22 - 46:26
  • 46:26 - 46:31
  • 46:31 - 46:35
  • 46:35 - 46:38
  • 46:38 - 46:43
  • 46:44 - 46:48
  • 46:48 - 46:51
  • 46:51 - 46:56
  • 46:56 - 47:00
  • 47:00 - 47:06
  • 47:06 - 47:09
  • 47:09 - 47:15
  • 47:15 - 47:19
  • 47:19 - 47:24
  • 47:24 - 47:29
  • 47:29 - 47:34
  • 47:34 - 47:37
  • 47:37 - 47:43
  • 47:43 - 47:48
  • 47:48 - 47:51
  • 47:51 - 47:54
  • 47:54 - 47:59
  • 47:59 - 48:06
  • 48:06 - 48:10
  • 48:10 - 48:14
  • 48:14 - 48:18
  • 48:18 - 48:23
  • 48:23 - 48:27
  • 48:27 - 48:32
  • 48:32 - 48:37
  • 48:37 - 48:42
  • 48:42 - 48:47
  • 48:47 - 48:51
  • 48:51 - 48:55
  • 48:55 - 49:00
  • 49:00 - 49:04
  • 49:04 - 49:09
  • 49:09 - 49:14
  • 49:14 - 49:17
  • 49:17 - 49:21
  • 49:21 - 49:26
  • 49:26 - 49:32
  • 49:32 - 49:36
  • 49:36 - 49:40
  • 49:40 - 49:44
  • 49:44 - 49:49
  • 49:49 - 49:54
  • 49:54 - 49:58
  • 49:58 - 50:02
  • 50:02 - 50:07
  • 50:07 - 50:11
  • 50:11 - 50:15
  • 50:15 - 50:21
  • 50:21 - 50:25
  • 50:25 - 50:29
  • 50:29 - 50:33
  • 50:33 - 50:38
  • 50:38 - 50:43
  • 50:43 - 50:48
  • 50:48 - 50:52
  • 50:52 - 50:56
  • 50:56 - 50:59
  • 51:00 - 51:06
  • 51:06 - 51:10
  • 51:10 - 51:14
  • 51:14 - 51:18
  • 51:18 - 51:23
  • 51:23 - 51:27
  • 51:27 - 51:31
  • 51:31 - 51:37
  • 51:37 - 51:42
  • 51:42 - 51:46
  • 51:46 - 51:50
  • 51:50 - 51:54
  • 51:54 - 51:58
  • 51:58 - 52:10
  • 52:11 - 52:14
  • 52:14 - 52:17
  • 52:17 - 52:21
  • 52:21 - 52:25
  • 52:25 - 52:31
  • 52:31 - 52:35
  • 52:35 - 52:41
  • 52:41 - 52:44
  • 52:44 - 52:47
  • 52:47 - 52:52
  • 52:52 - 52:57
  • 52:57 - 53:02
  • 53:02 - 53:06
  • 53:06 - 53:12
  • 53:12 - 53:15
  • 53:15 - 53:19
  • 53:19 - 53:24
  • 53:24 - 53:28
  • 53:28 - 53:33
  • 53:33 - 53:39
  • 53:39 - 53:45
  • 53:47 - 53:52
  • 53:52 - 53:56
  • 53:56 - 54:00
  • 54:00 - 54:05
  • 54:05 - 54:08
  • 54:08 - 54:11
  • 54:11 - 54:15
  • 54:15 - 54:20
  • 54:20 - 54:25
  • 54:25 - 54:30
  • 54:30 - 54:35
  • 54:35 - 54:39
  • 54:39 - 54:43
  • 54:43 - 54:47
  • 54:47 - 54:50
  • 54:50 - 54:54
  • 54:54 - 54:59
  • 54:59 - 55:03
  • 55:03 - 55:07
  • 55:07 - 55:11
  • 55:11 - 55:18
  • 55:18 - 55:24
  • 55:24 - 55:31
  • 55:31 - 55:38
  • 55:38 - 55:43
  • 55:43 - 55:47
  • 55:47 - 55:51
  • 55:51 - 55:55
  • 55:55 - 55:59
  • 55:59 - 56:04
  • 56:04 - 56:10
  • 56:10 - 56:14
  • 56:14 - 56:17
  • 56:17 - 56:22
  • 56:22 - 56:26
  • 56:26 - 56:31
  • 56:31 - 56:35
  • 56:35 - 56:40
  • 56:40 - 56:44
  • 56:46 - 56:50
  • 56:50 - 56:54
  • 56:54 - 56:58
  • 56:58 - 57:02
  • 57:02 - 57:07
  • 57:07 - 57:10
  • 57:10 - 57:13
  • 57:13 - 57:16
  • 57:16 - 57:19
  • 57:19 - 57:23
  • 57:23 - 57:27
  • 57:27 - 57:30
  • 57:30 - 57:34
  • 57:34 - 57:38
  • 57:38 - 57:43
  • 57:43 - 57:47
  • 57:47 - 57:51
  • 57:51 - 57:55
  • 57:55 - 57:59
  • 57:59 - 58:03
  • 58:03 - 58:06
  • 58:06 - 58:10
  • 58:10 - 58:13
  • 58:13 - 58:18
  • 58:18 - 58:22
  • 58:22 - 58:26
  • 58:26 - 58:29
  • 58:29 - 58:33
  • 58:33 - 58:37
  • 58:37 - 58:41
  • 58:41 - 58:45
  • 58:45 - 58:49
  • 58:49 - 58:53
  • 58:53 - 58:56
  • 58:57 - 59:02
  • 59:02 - 59:05
  • 59:05 - 59:10
  • 59:10 - 59:14
  • 59:14 - 59:17
  • 59:17 - 59:22
  • 59:22 - 59:27
  • 59:27 - 59:32
  • 59:32 - 59:37
  • 59:37 - 59:42
  • 59:42 - 59:48
  • 59:48 - 59:54
  • 59:54 - 59:59
  • 59:59 - 60:02
  • 60:02 - 60:05
  • 60:05 - 60:11
  • 60:11 - 60:16
  • 60:16 - 60:19
  • 60:19 - 60:23
  • 60:23 - 60:26
  • 60:26 - 60:29
  • 60:29 - 60:34
  • 60:34 - 60:37
  • 60:37 - 60:42
  • 60:42 - 60:46
  • 60:46 - 60:49
  • 60:49 - 60:54
  • 60:54 - 60:58
  • 60:58 - 61:02
  • 61:02 - 61:08
  • 61:08 - 61:11
  • 61:11 - 61:16
  • 61:16 - 61:20
  • 61:20 - 61:24
  • 61:24 - 61:27
  • 61:29 - 61:34
  • 61:34 - 61:36
  • 61:36 - 61:40
  • 61:40 - 61:43
  • 61:43 - 61:46
  • 61:46 - 61:49
  • 61:49 - 61:52
  • 61:52 - 61:57
  • 61:57 - 62:01
  • 62:01 - 62:05
  • 62:05 - 62:08
  • 62:08 - 62:12
  • 62:12 - 62:17
  • 62:17 - 62:20
  • 62:20 - 62:23
  • 62:23 - 62:28
  • 62:28 - 62:33
  • 62:33 - 62:38
  • 62:38 - 62:42
  • 62:42 - 62:47
  • 62:47 - 62:52
  • 62:52 - 62:56
  • 62:56 - 63:00
  • 63:00 - 63:03
  • 63:03 - 63:06
  • 63:07 - 63:12
  • 63:12 - 63:40
Title:
36C3 - Das nützlich-unbedenklich Spektrum
Description:

more » « less
Video Language:
German
Duration:
01:03:40

English subtitles

Incomplete

Revisions