It's not a character flaw -- they are kids, and trying to avoiding trouble is instinctive for kids. Eventually they learn about the morality of honesty, but it takes a LONG time.
If I might make a suggestion that could lessen your frustration? Stop trying to get them to confess, especially if you already know what happened or who did what. You are inviting them to lie, and just setting them up to dig themselves in deeper and compound the problem, and in so doing you upset yourself far more than you teach them. The whole idea that confession is good for the soul is TOTALLY lost on children; the idea is too complex for them. (I've noticed that people who are really morally offended by lies of any kind always seem to want to try to elicit confessions from wrongdoers before any lie ever actually happens. I think that it's very counterproductive in most circumstances.)
Next time, try something like, "OK, the person who spilled these crackers on the kitchen floor has 5 minutes to get your tush in here and start cleaning it up, or TV will be gone for you both all weekend." That approach gives the culprit the opportunity to make amends without getting in real trouble at all; and you may be able to avoid the issue of lying altogether. (Giving them a short time to start the work gives the kid who didn't do it the opportunity to threaten dire consequences against the one who did, if he/she is going to cause them both to get punished, or to bribe the other one to do the work -- in either case, the goal is to get the mess-maker to get the mess cleaned up; not to force a confession out of the perpetrator.)
Obviously, this strategy isn't appropriate for something really egregious and obviously morally wrong, like torturing an animal. However, for something petty like making a mess, it's a very good option.